iOS 知識碎片記錄

1.父子控制器

父子控制器的使用可以大大的精簡代碼的耦合性,可以把比較複雜的界面拆分成多個控制器管理,比如網易新聞滾動新聞的實現,可以把用把多個tableview的控制器,作爲scrollView所在的控制器的子控制器。


給一個控制器加入了導航欄,控制器會自動調用-
(void)didMoveToParentViewController:(UIViewController *)parent方法,可以在這個方法內添加相應的操作。但是如果是手動調用
- (void)addChildViewController:(UIViewController *)childController ;

被添加的控制器不會調用該方法,只會調用

- (void)willMoveToParentViewController:(UIViewController *)parent

小知識

某些特殊情況需要注意:比如對於一個具有導航欄的控制器A,添加了子控制器B,並且把B的視圖添加到了A上面,希望操作點擊B上面的某個按鈕push到某個控制器C,這時候是可以的,因爲A有了導航欄屬於導航欄的控制器,B是A的自控制器,也同樣是導航欄的子控制器,所以導航欄可以進行push C控制器操作但是,如果A僅僅是將B的視圖放在了自己的子視圖位置,點擊按鈕無效,因爲這個時候B的調用導航欄控制器方法的時候導航欄爲空,沒有辦法進行push操作.

將子控制器的視圖添加到父控制器不一定是全屏幕的,通過多次調用addSubView加入相同的視圖不會造成多次重疊只會讓視圖呈現在最外面。

.默認情況下所有控制器的view的autoresizingMask屬性包含UIViewAutoresizingFlexibleWidth和UIViewAutoresizingFlexibleHeight。所以在添加子控制器的視圖到父控制器view的子視圖如果外觀不正確的話可以考慮將autoresizingMask屬性設置爲None.

tableView

如果想設置不同高度的單元格,可以先

返回每一行的估計高度, 只要返回了估計高度,那麼就會先調用tableView:cellForRowAtIndexPath:方法創建cell,再調用tableView:heightForRowAtIndexPath:方法獲取cell的真實高度

  - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath

想設置tableView多行選中可以自定義數組實現也可以使用:

// 允許在編輯模式進行多選操作
self.tableView.allowsMultipleSelectionDuringEditing = YES;

通過:

    NSArray *indexPaths = [self.tableView indexPathsForSelectedRows];

獲取獲取選中的行。

scrollView

UIScrollView內部子控件添加約束的注意點:
1.子控件的尺寸不能通過UIScrollView來計算,可以考慮通過以下方式計算
可以設置固定值(width==100,height==300)
可以相對於UIScrollView以外的其他控件來計算尺寸
2.UIScrollView的frame應該通過子控件以外的其他控件來計算
3.UIScrollView的contentSize通過子控件來計算
根據子控件的尺寸以及子控件與UIScrollView之間的間距

scrollView結束了滾動動畫以後就會調用這個方法(比如- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;方法執行的動畫完畢後)會調用下面方法
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

手指鬆開scrollView後,scrollView停止減速完畢就會調用這個

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
發佈了195 篇原創文章 · 獲贊 59 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章