您的位置:首页 > 移动开发 > IOS开发

iOS 知识碎片记录

2016-03-06 20:04 246 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: