1、UITableView的代理方法数组
#pragma mark 每一行的高度atom
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPathspa
#pragma mark 选中了某一行就会调用设计
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 代理
#pragma mark 取消选中了某一行就会调用对象
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath排序
#pragma mark 当用户提交了一个编辑操做就会调用(好比点击了“删除”按钮)事件
// 只要实现了这个方法,就会默认添加滑动删除功能开发
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPathget
#pragma mark 当移动了某一行cell就会调用
// 只要实现了这个方法,就会默认添加排序功能
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
2、修改Cell的状态
1.最好经过“修改模型数据”来修改Cell的状态
2.修改步骤
1> 修改模型数据
2> 刷新表格
* 总体刷新:reloadData(最重要)
* 局部刷新:reloadRowsAtIndexPaths:withRowAnimation:
3、UITableView常见方法
1.取消选中某一行(去掉cell选中时默认的蓝色背景)
- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;
2.局部刷新(仅仅刷新indexPaths数组中装着的行)
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
3.总体刷新(屏幕中的每一行都刷新)
- (void)reloadData;
4.直接删除界面上的行数(要求模型数据也要删掉对应的数量)
- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
5.设置编辑模式
@property(nonatomic,getter=isEditing) BOOL editing;
- (void)setEditing:(BOOL)editing animated:(BOOL)animated;
// 注意:
无论是局部刷新,仍是总体刷新,原理都是:
UITableView从新向数据源(dataSource)和代理(delegate)发送相应的消息,最终将获得的数据展现出来
1.1
错误缘由:说ViewController 没有实现 tableView:numberOfRowsInSection:
解决方式:实现tableView:numberOfRowsInSection:
1.2
UITableView内部实现原理:
数据源实现了这个方法
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
tableView内部自动会调用如下方法添加cell。
[tableView addSubview:cell];
若是返回的cell为空,也就意味着生成下面一行代码。
[tableView addSubview:nil];
而addSubview是将右边参数添加到数组中保存起来,而数组是不能添加空值的。全部集合对象都不能出传空。例如数组,字典,NSSet。
以上错误总结:做为tableView的数据源必须实现两个方法。
返回行数
-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section;
返回每一行显示的内容
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
另外返回每一行显示的内容不能返回nil。
UITableView开发模式都是先将数据转换为模型。
步骤一:根据plist文件建立模型对象
步骤二,解析plist文件,将文件中的数据转换为模型对象。
步骤三:将模型对象用一个数组保存起来
步骤四:实现tableView的数据源方法。(设置数据源,遵照数据源协议)
步骤五:将字典转化为模型的操做封装到模型里面去。
步骤六:根据设计角度的上面思考,须要实现两个方法。
步骤七:实现tableView的代理方法。(设置代理,遵照代理协议)
步骤八:点击某一行打钩实现步骤:
步骤九:在返回每一行的方法中,添加一个判断来决定是否cell须要打钩
步骤十:更改UILabel的显示
步骤十一:监听删除按钮的点击
使用注意:必须先后数据保持一致才能调用这些方法,不然会报错。
-(void)reloadRowsAtIndexPaths:(NSArray*)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
-(void)reloadSections:(NSIndexSet*)sections withRowAnimation:(UITableViewRowAnimation)animation;
使用注意:必须数据删除多少,表格删除多少,先后数据不一致才能调用这些方法,不然会报错。
- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
- (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;
- (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation;
这个刷新方法,没有限制
- (void)reloadData;
步骤一:搭建页面
步骤二:实现数据源方法。(设置数据源,遵照数据源协议)
步骤三:建立数据模型
步骤四:建立数组保存数据模型
步骤五:监听删除按钮,点击删除按钮进入编辑模式
步骤六:改本地化
步骤七:实现代理方法。
当用户提交一个编辑操做就会调用。实现这个方法还会默认支持滑动删除
步骤八:实现排序功能
模型中不能拥有控制器和视图,模型有可能用来重用的,包含控制器就不能重用了,由于模型脱离控制器就不能使用了。
视图不能直接访问模型。
视图和模型的联系都是经过控制器。
控制器向模型拿到数据展现到视图上。