一、初始化
1.UITableView自定义cell时
若使用nib,使用 registerNib: 注册,dequeue时会调用 cell 的
-(void)awakeFromNib
不使用nib,使用 registerClass: 注册, dequeue时会调用 cell 的 - (id)initWithStyle:withReuseableCellIdentifier:
2.UICollectionView自定义cell时
若使用nib,使用registerNib:注册,dequeue时会调用 cell的
-(void)awakeFromNib
不使用nib,使用 registerClass: 注册, dequeue时会调用 cell 的
- (id)initWithFrame:
若不适使用registerClass注册,则根据自己创建cell时写的[cell alloc] init...之类来调用
2.隐藏分割线
2.1.把多余的分割线去掉【有一个分割线】
UIView * footerView = [[UIView alloc] initWithFrame:CGRectZero];
self.tableView.tableFooterView = footerView;
2.2.去掉最后一条分割线
self.searchResultTableView.tableFooterView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 0, 1)];
2.3.键盘隐藏问题
self.searchHistoryTableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
self.searchResultTableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
三、计算高度
3.1
定义布局类layout 包含model和每个元素rect、总高度height。数据源存储是 布局类layout。
四、各种复杂cell 处理 防止各种switch
4.1枚举大法
代理 switch 0 1的编码
4.2协议大法
你不得不展示不同类型的 cell,像是图片和状态信息。为了保持代码优雅以及避免奇怪的数组索引计算,你应该将各种类型的数据存储到同一个数组中。数组是同质的,意味着你不能在同一个数组中存储不同的类型。面对这个问题首先想到的解决方案是协议。
五、评论回复功能开发
5.1一个tableivew:段头(sectionHead)+Cell+段尾(sectionTail)
推荐使用。
5.2uitableview嵌套uitableview