提供一种给控制器瘦身的方式,顺带实现实现一下单选多选效果。
单选就不用说。
单选
给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 的调用时机有点分散。
代码注释很详细。demo在这里。
https://github.com/gjcbo/OCSmallFunction
网友评论