tableView的编辑

tableView的编辑(tableView的协议方法)

1.设置导航栏的编辑按钮

 // 设置一下导航栏的编辑按钮
    self.navigationItem.rightBarButtonItem = self.editButtonItem;

2.开启tableView的编辑模式!!!!!!!!!

 // 开启一下tableView的编辑模式
    [self.tableView setEditing:YES animated:YES];

协议方法一:重新编辑按钮的方法(重写系统提供的编辑按钮的点击方法)--->2的方法(让tableView和导航栏的状态一样)

#pragma mark 重新编辑按钮的方法
// 重写一下系统提供的编辑按钮的点击方法
- (void)setEditing:(BOOL)editing animated:(BOOL)animated{
    [super setEditing:editing animated:animated];
    // tableview 和导航栏的状态一样
    [self.tableView setEditing:editing animated:animated];
}

协议方法二:逐行的设置,哪些需要编辑,哪些不需要(关键词canEdit)(返回值是BOOL类型)

#pragma mark 逐行的去设置,哪些行编辑,哪些行不编辑
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
//    // 奇数行可以编辑,偶数不可以
//    if (indexPath.row % 2 == 0) {
//        
//        return NO;
//        
//    } else {
//        
//        return YES;
//        
//    }
    return YES;
}

协议方法三:设置编辑的模式(删除,插入,多选的状态)返回值-->uitableviewcelleditingstyle  关键词是editingStyle 插入 | 删除-->是多选状态(| 的作用是一个状态加上另一个状态)

#pragma mark 设置编辑的模式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
//    // tableView 实现多选效果!!!!!!!!竖线的作用(一个状态加上另一个状态,返回多选状态)
//    return UITableViewCellEditingStyleInsert | UITableViewCellEditingStyleDelete;
    
    return UITableViewCellEditingStyleDelete;

}

协议方法四:设置删除按钮的标题(默认是delete)返回值是NSString 关键词是titleForDelete

#pragma mark 设置删除按钮的标题(默认是delete)
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
    return @"来点我啊";
}

协议方法五:实现左划的效果,对应按钮的点击方法(左划之后可以点击)返回值是void  关键词是commitEditing

步骤1.判断当前的编辑模式  2.删除的话,应该先把数组的对象删除掉   3.更新数据:第一种是直接reloadData  !第二种是用deleteRowAtIndexPaths: 方法

#pragma mark 实现这个方法,实现左划效果,而且是对应按钮功能的方法
// 左划之后可以点击,相当于点击方法
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"编辑开始");
    // 先判断当前的编辑模式
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // 先把数组里的对象删除掉
        [self.modelArr removeObjectAtIndex:indexPath.row];
//        // 更新数据(第一种方式)
//        [self.tableView reloadData];
        // 第二种方式
        [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationMiddle];
    }
}

协议方法六:移动 返回值(void)关键词move 它只是视觉上的移动,并没有改变数据的顺序,所以想要改变数组的顺序,需要用代码实现 sourceIndexPath    destinationIndexPath

步骤1.获取要移动的数据(记得retain,防止内存隐患,防止崩溃)  2.在数组原先的位置里把这个对象移除掉 3.将数据插入到现在的位置

#pragma mark 移动
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath{
    // 它只是视觉上移动,并没有改变数据的顺序,所以想要改变数组的顺序,需要用代码来实现
    // 获取要移动的数据
    //                                           内存有隐患,所以在这里加retain防止崩溃
    Student *stu = [self.modelArr[sourceIndexPath.row] retain];
    // 在数组里把这个对象移除掉
    [self.modelArr removeObjectAtIndex:sourceIndexPath.row];
    // 插入到数组里
    [self.modelArr insertObject:stu atIndex:destinationIndexPath.row];
    [stu release];

}

左滑有多个按钮功能的协议方法UITableViewRowAction 返回是一个数组

- (nullable NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewRowAction *action = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"ok" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
        NSLog(@"sdfsfs");
    }];
    action.backgroundColor = [UIColor redColor];
    
    UITableViewRowAction *actionTwo = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"no" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
        NSLog(@"sfs");
    }];
    action.backgroundColor = [UIColor yellowColor];
    return @[action, actionTwo];
}

点击之后更改名字(最重要的一件事情就是要将tableview单行刷新,优化不消耗资源!!!!!!!!!!!!!!)关键词是reloadRow

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    // 点击改名
    Student *stu = self.modelArr[indexPath.row];
    stu.name = @"宋江";
//    [self.tableView reloadData];
    // tableView的单行刷新!!!!!!!!!!!!(优化)不消耗资源!!!!!!!!!!!!!!!!!!!!!!!!!
    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    


}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用PyQt5中的QAbstractTableModel来创建可编辑TableView。下面是一个简单的示例代码: ```python from PyQt5.QtCore import Qt, QAbstractTableModel, QVariant from PyQt5.QtWidgets import QApplication, QTableView class MyTableModel(QAbstractTableModel): def __init__(self, data): super().__init__() self.data = data def rowCount(self, parent=None): return len(self.data) def columnCount(self, parent=None): return len(self.data[0]) def data(self, index, role=Qt.DisplayRole): if role == Qt.DisplayRole or role == Qt.EditRole: return QVariant(self.data[index.row()][index.column()]) return QVariant() def setData(self, index, value, role=Qt.EditRole): if role == Qt.EditRole: self.data[index.row()][index.column()] = value self.dataChanged.emit(index, index) return True return False def flags(self, index): return Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsSelectable if __name__ == '__main__': app = QApplication([]) data = [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']] model = MyTableModel(data) view = QTableView() view.setModel(model) view.show() app.exec_() ``` 这个示例中,我们定义了一个自定义的QAbstractTableModel子类`MyTableModel`,重写了一些必要的方法来实现表格的编辑功能。在`setData`方法中,我们更新了相应单元格的值,并发出`dataChanged`信号来通知视图更新。最后,我们使用QTableView来显示这个自定义的模型。 你可以根据自己的需求,修改`MyTableModel`中的方法来适应你的数据模型和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值