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