美文网首页
针对iOS系统设置的表单的数据设置

针对iOS系统设置的表单的数据设置

作者: NateLam | 来源:发表于2017-05-15 18:06 被阅读16次

类似这样的界面数据怎么设置更优


系统设置.PNG

这种情况有好几种做法: 运行效率差不多, 可以说一致, 但代码可读性和后期维护难度从差到易会有这么一个排列:

直接在cell赋值方法通过if else一个个赋值上去 <
创建数组, 数组包含字典(字典key和value是字符串, 手写的时候易出错) <
创建数组, 数组包含model

补充一句, plist, xib和storyBoard本质上都是xml数据, 所以转换为代码是需要一定资源的, 我们的tableView本地数据可以事先写在plist里面, 用到的时候再拿出来解析, 但个人觉得最优还是直接纯代码, 虽然小型数据看不出区别

下面说一下最优的用model方法:

1.首先创建一个model类, 暂且称之为A类, 里面有俩字符串属性header和footer, 分别对应分区头部和尾部标题.
2.再新建一个A类的子类B, 负责存储每个分区每一行的图标和标题, 图标属性名假设为icon, 标题属性名假设为name,
3.然后在A类创建一个数组属性, 用来装Bmodel们, 假设叫arr

4.在B类中对外声明一个model初始化方法, 将值传进来B类, 如下:

+ (instancetype)modelWithName:(NSString *)name icon:(NSString *)icon{
    B *b = [B new];
    b.name = name;
    b.icon = icon;
    return b;
}

这些准备完毕后, 在vc里面懒加载一个数组, 用于装Amodel, 例如:

- (NSArray *)array{
    if(!_array){
        A *a1 = [A new];
        a1.header = @"分区头部标题1";
        a1.footer = @"分区尾部标题1";
        //a1.arr 元素个数取决于该分区有几行row
        a1.arr = @[
                        [B modelWithName:@"row标题1"  icon:@"row图标名1"];
                        [B modelWithName:@"row标题2"  icon:@"row图标名2"];
                        [B modelWithName:@"row标题3"  icon:@"row图标名3"];
                    ];

      //有第二第三分区还可以继续声明a2,  a3,  数据结构依然如上

      _array = @[a1, a2, .......];
    }
    return _array;
}

数据设置完剩下的tableView协议方法就方便了, 分区数就是self.array.count, row行数:

A *a = self.array[section];
a.arr.count 就是row行数

取出row的协议方法里面怎么赋值呢?

A *a = self.array[section];
B *b =  a.arr[indexPath.row];
cell.labelOfTitle.text = b.name;
cell.imageViewOfIcon.image = [UIImage imageNamed:b.icon];

剩下分区头部标题和尾部标题:

A *a = self.array[section];
return a.header;

尾部标题同理

当需求发生改变, 要改的只是在vc懒加载的那个数组而已, tableView所有协议方法都不用动, 除非cell样式有新需求那没招, 就是这样了, 完结, 撒花!

相关文章