常規(guī)按鈕都是一個(gè)矩形區(qū)域,即使設(shè)置了按鈕layer的cornerRadious,能響應(yīng)點(diǎn)擊事件的依舊是整個(gè)矩形區(qū)域。
OBShapedButton是開源的第三方庫(kù),直接繼承自UIButton,直接使用即可。它的響應(yīng)區(qū)域只限定在button的圖片或者背景圖片區(qū)域,周圍空出的區(qū)域無法響應(yīng)。注意只是響應(yīng)區(qū)域縮小了,frame還是原來的frame。
UIButton的實(shí)例方法,通過代碼手動(dòng)發(fā)送按鈕的點(diǎn)擊事件觸發(fā)按鈕的響應(yīng)方法。
代碼中所有得到的NSDate都是UTC時(shí)間(國(guó)際標(biāo)準(zhǔn)時(shí)間,同GMT時(shí)間),例如打印[NSDate date],打印結(jié)果總會(huì)是UTC時(shí)間,不管設(shè)備的時(shí)區(qū)怎么更變。
那么在處理時(shí)間的時(shí)候是不是要在時(shí)區(qū)上下一番工夫呢?例如后臺(tái)返回一個(gè)時(shí)間字符串,我想改變它的格式,需要做的是先得到時(shí)間字符串的date,然后重新設(shè)置格式得到新的時(shí)間字符串。之前說過所有的Date都是UTC時(shí)間,因此,打印中間得到的date會(huì)發(fā)現(xiàn)時(shí)間比當(dāng)前慢了8小時(shí)(假設(shè)當(dāng)前系統(tǒng)時(shí)區(qū)為東8區(qū)),那么用這個(gè)時(shí)間來生成新的string,結(jié)果會(huì)不會(huì)就慢8小時(shí)呢?答案是不會(huì)的,因?yàn)闀r(shí)間格式NSDateFormatter有timezone屬性,這個(gè)屬性的值默認(rèn)為當(dāng)前系統(tǒng)時(shí)區(qū),因此從dete轉(zhuǎn)換到string的時(shí)候,系統(tǒng)計(jì)算時(shí)自動(dòng)地在UTC時(shí)間上加了系統(tǒng)時(shí)區(qū)的偏差時(shí),所以還是原來的時(shí)間,并不會(huì)慢8小時(shí)。另外中間date慢了8小時(shí)也是根據(jù)dateFormatter的timezone值來的。
除了NSDateFormatter,日歷類NSCalendar也有timeZone屬性。假設(shè)現(xiàn)在獲取到了一個(gè)日期date對(duì)應(yīng)的dateComponents,打印date查看發(fā)現(xiàn)時(shí)間慢8小時(shí),而打印dateComponents的hour查看,發(fā)現(xiàn)并不會(huì)慢8小時(shí),打印結(jié)果就是當(dāng)前小時(shí)。因?yàn)樵趶膁ate->dateComponents需要借助NSCalendar對(duì)象,而calendar同樣有個(gè)timeZone屬性,默認(rèn)也是當(dāng)前系統(tǒng)時(shí)區(qū),轉(zhuǎn)換過程中會(huì)自動(dòng)加上時(shí)區(qū)偏差小時(shí)數(shù)(時(shí)差)。
因此在時(shí)區(qū)問題上通常并不需要做多余處理。
若當(dāng)前視圖控制器的顯示是add視圖控制器的view是到上層視圖控制器的某個(gè)view中,而不是Push到UInavagationController中或者是在UITabbarController容器中的,也就是說這個(gè)控制器未處在當(dāng)前app的堆棧中,那么從這個(gè)視圖控制器present另一個(gè)視圖控制器或者popover會(huì)發(fā)出警告 Presenting view controllers on detached view controllers!
之前計(jì)算Cell的高度都是根據(jù)Cell內(nèi)容空間逐個(gè)計(jì)算高度然后相加得到一個(gè)確定值,這樣當(dāng)控件數(shù)量多,或者像label這種要根據(jù)文本長(zhǎng)度自適應(yīng)高度的控件,在計(jì)算label的高度的時(shí)候也要計(jì)算文本高度才行,多么蛋疼的事!有了UITableView+FDTemplateLayoutCell,cell高度計(jì)算問題會(huì)省力很多!
UITableView+FDTemplateLayoutCell 簡(jiǎn)單來說,一句話解決cell高度計(jì)算的問題。
在heightForRowAtIndexPath代理方法中寫
return [tableView fd_heightForCellWithIdentifier:@"identifierMyCell" cacheByIndexPath:indexPath configuration:^(id cell) { //cell的可變內(nèi)容配置 例如label的text,用來確定高度}];
這樣tableView就能自動(dòng)根據(jù)cell的autoLayout情況計(jì)算出高度。
因此使用該方法的前提是cell內(nèi)容控件的自動(dòng)布局一定要準(zhǔn)確??梢?span id="70qarhlowxag" class="s1">IB中布局也可以純代碼自動(dòng)布局,個(gè)人習(xí)慣使用Masonry代碼布局。
[[NSUserDefaults standardUserDefaults] boolForKey:@"firstStart"]可以用來判斷是否是第一次使用app。
第一次啟動(dòng)前為NO,啟動(dòng)后要手動(dòng)設(shè)為YES
若直接對(duì)UINavagationController.view或者UItabBarController.view添加視圖myView,對(duì)前者而言,push了一個(gè)viewController之后,myView不會(huì)被覆蓋,依舊顯示在屏幕最前面。對(duì)后者而言,切換viewController后,myView同樣顯示在老地方。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注