iOS开发 | 编辑cell的思路和方法

作者: Lol刀妹 | 来源:发表于2017-05-13 20:20 被阅读730次
    沉迷王者荣耀,简书许久没更新,罪过。。。

    先看效果

    今天一个同学让我帮他做cell编辑功能,效果大致如下:


    效果.gif

    点击顶部编辑按钮,所有cell变为可编辑状态,按钮文字变为“完成”,cell编辑后点击按钮,所有cell进入不可编辑状态。

    思路

    cell展示的内容来自数据源,所以,对cell展示内容进行修改,实际上就是对数据源的修改

    还是原来的强势

    关键点说明

    1.关于model

    model是数据的载体,cell展示的内容也有model决定,所以model里不仅有3个文本的内容,还有一个标识是否是可编辑状态的属性。

    #import <Foundation/Foundation.h>
    
    @interface EditableCellModel : NSObject
    
    @property (nonatomic,copy) NSString *name;
    @property (nonatomic,copy) NSString *range;
    @property (nonatomic,copy) NSString *value;
    
    /** 是否是编辑状态 */
    @property (nonatomic,assign) BOOL isEditState;
    
    @end
    

    2.编辑cell上的textField如何传值到视图控制器?

    用代理,将这个cell和textField一起传过去(传cell是为了获取cell所在的indexPath,传textField是为了获取textField的文本,改变数据源这两个缺一不可):

    @class EditableCell;
    @protocol EditableCellDelegate <NSObject>
    
    - (void)editableCell:(EditableCell *)editableCell valueTextFieldTextDidChange:(UITextField *)sender;
    
    @end
    

    3.如何改变数据源?

    在上述代理方法里进行处理:

    #pragma mark - cell的textField文本改变时回调
    - (void)editableCell:(EditableCell *)editableCell valueTextFieldTextDidChange:(UITextField *)sender{
        // 获取cell所在行数
        NSInteger row = [self.tableView indexPathForCell:editableCell].row;
        // 获取cell对应的model
        EditableCellModel *cellModel = self.dataArray[row];
        // 修改model
        cellModel.value = sender.text;
    }
    

    4.编辑按钮点击的处理

    /** 编辑按钮点击 */
    - (void)editButtonClicked:(UIButton *)sender{
        // 改变数据源
        for (EditableCellModel *cellModel in self.dataArray) {
            // 是否进入编辑状态取反
            cellModel.isEditState = !cellModel.isEditState;
        }
        
        // 刷新tableView
        [self.tableView reloadData];
        
        // 更新按钮文字
        NSString *editButtonTitle = [sender.titleLabel.text isEqualToString:@"编辑"] ? @"完成" : @"编辑";
        [sender setTitle:editButtonTitle forState:UIControlStateNormal];
    }
    

    总结及引申

    编辑cell,主要就两步:

    • 第一步:改变数据源
    • 第二步:reloadData

    有些cell的编辑虽然看起复杂,但原理也是这样的,比如我们公司的商城APP的购物车页面:


    购物车页面

    数量加减、选不选中、删除商品什么的,其实都是对数据源的修改。

    小demo一份:

    demo

    相关文章

      网友评论

      本文标题:iOS开发 | 编辑cell的思路和方法

      本文链接:https://www.haomeiwen.com/subject/dabxxxtx.html