UI-多选单选

UI-多选单选_第1张图片
单选多选.gif

提供一种给控制器瘦身的方式,顺带实现实现一下单选多选效果。
单选就不用说。

单选

给mode添加一个isChecked 属性,根据属性去修改 accessoryView的背景图片即可。

// accessoryView + model选中状态实现单选
    if (payTypeModel.isChecked) {
        
        self.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"selected_on"]];
    }else {
        self.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"selected_off"]];
    }

多选

看了更轻量的 View Controllers ,看了几篇介绍MVVM的博客,看了某大牛的购物车demo。就刻意的去模仿,刻意的想去给控制器瘦身, 根据这个想法实现了一下一个给控制器瘦身的多选单选demo。
为了给控制器瘦身,单独多创建出来两个继承自NSObject的类

Format:负责业务逻辑(网络请求、选中删除、购物车结算.......)
一方面自己暴露一些几口供外部调用。
另一方面 通过代理将结果回调给vc。通知VC在需要的时候刷新表格。


Proxy:负责tableView 或 CollectionView的代理方法。
点击cell、点击了那个cell 、cell的选中状态。Proxy都知道。
他的任务就是将他知道的东西通过block传递出来。 告诉 Format 去做事情。


VC:管理Format 、Proxy。需要做事情的时候让他们干活。

把以前在控制器中写的代码都挪出来,根据功能分别放到上面两个类中demo中控制器的代码 < 200行
通过block 和 代理 来实现Format 、Proxy、VC、View之间的通信。
好处:感觉VC 确实干净不少, 职责分离。各干个的活。
if (bug) {好改};
缺点是: 多创建两个类,增加了代码量,刚开始可能不太习惯。还有一点就是Format 的调用时机有点分散。

UI-多选单选_第2张图片
文件夹结构.png
UI-多选单选_第3张图片
结构图.png

代码注释很详细。demo在这里。
https://github.com/gjcbo/OCSmallFunction

你可能感兴趣的:(UI-多选单选)