1.向表格中增加数据
刷新方式一: 全部刷新 reloadData
刷新方式二: 只更新一部分 insertRowsAtIndexPaths
//刷新tableView
[self.tableView reloadData];
//刷新最后一行
NSIndexPath *path = [NSIndexPath indexPathForRow:self.cities.count - 1 inSection:0];
[self.tableView insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationRight];
向表格中增加数据可以使用委托,也可以使用block
使用委托增加数据时:
1、委托方在.h文件中定义好规则,同时声明代理属性
2、委托方在必要的时候调用代理方法
3、代理方import委托方后采纳委托方的协议,并实现协议中的方法
4、代理方在必要的时候将self赋值给委托方的代理属性以达到代理的目的
使用block增加数据时:A=>B A回调B中的block
1、在A中Typedef一下 block,因为不自定义写代码时比较繁琐
typedef void(^BLOCK)(参数类型);
2、定义一个BLOCK属性
3、在必要时调用BLOCK属性从而回调B中的block代码块
4、B中在必要的地方写好block
2.表格的编辑模式
什么是表格编辑模式
–表格上提供了删除 增加 移动这样的标识,点击后可以实现对表格中数据 删除 增加 移动 这样的操作
如何进入到表格的编辑状态
–设置表格的 editing 属性 为 YES 即可
如何编辑 插入 和 删除
–问一:该行是否可以编辑 (选问 默认都是可以编辑的)
–问二:该行编辑类型是什么 (选问 默认都是删除)
–一答: 点击了 插入 或 删除 如何处理
如何编辑 移动
–问一:当前行是否可以移动
–一答:移动后如何处理
-(NSMutableArray *)cities {
if (_cities == nil) {
_cities = [@[@"北京",@"上海",@"广州"] mutableCopy];
}
return _cities;
}
- (void)viewDidLoad {
[super viewDidLoad];
// self.editButtonItem tableViewController 自带编辑按键
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"编辑" style:UIBarButtonItemStylePlain target:self action:@selector(editTableView:)];
}
-(void)editTableView:(UIBarButtonItem*)sender {
//设置表格的编辑状态
// self.tableView.editing = !self.tableView.editing;
[self.tableView setEditing:!self.tableView.editing animated:YES];
[sender setTitle:self.tableView.isEditing ? @"完成" : @"编辑"];
}
//表格编辑
//问一:该行是否可以编辑 (选问 默认都是可以编辑的)
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
if (indexPath.row == 0) return NO;
return YES;
}
//问二:该行编辑类型是什么 (选问 默认都是删除)
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == self.cities.count - 1)
return UITableViewCellEditingStyleInsert;
return UITableViewCellEditingStyleDelete;
}
//一答: 点击了 插入 或 删除 如何处理
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
//删除
if (editingStyle == UITableViewCellEditingStyleDelete) {
//需要先把元素从数组中删除
[self.cities removeObjectAtIndex:indexPath.row];
// //删除表格中的 某行
// [self.tableView deleteRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationTop];
[self.tableView reloadData];
return;
}
//插入
[self.cities addObject:@"深圳"];
[self.tableView reloadData];
}
//单元格的移动
//问一:当前行是否可以移动
-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
//一答:移动后如何处理
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
//从数组取出 起始位置的数据
NSString *city = self.cities[sourceIndexPath.row];
//把 元素 从数组 中移除
[self.cities removeObjectAtIndex:sourceIndexPath.row];
//把数据插入到 数组中 对应 移动到的位置
[self.cities insertObject:city atIndex:destinationIndexPath.row];
[self.tableView reloadData];
}
3.自定义单元格
step1:创建一个类,继承自UITableViewCell
step2:回答第三问时,创建的不再是UITableViewCell的实例,只需要创建自定义的Cell类的实例返回即可
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
CityCell *cell = [CityCell cityCellForTableView:tableView];
cell.myLabel.text = self.cities[indexPath.row];
return cell;
}