OC-向table中添加数据&table的编辑模式&通过封装自定义cell

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值