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 篇原创文章 · 获赞 61 · 访问量 27万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览