iOS 有复杂交互的VC 该如何维护

clipboard.png

上面是简易版交互图,
现在是这几个子view用代理方法,交给VC,
请求时,有些参数是全局公用的,存在了一个单例里,在view2里设置,然后在VC里读出来用,
感觉这样不是很好,
现在VC里有太多代理方法了,有什么好的方式解决这个问题么?

阅读 3.6k
3 个回答
  1. 如果你只是觉得代理比较多,可以考虑下 Self-Manager(文章) 模式, View 管理自己的事件和动作,比如 View1 点击 push 另外一个控制器,你现在需要代理给当前控制器,如果用 Self-Manager ,那么就是 View 自己处理,类似于在 View 中通过响应链拿到控制器去做操作,比如 [self.viewController.navigationController pushViewController:vc2 animated:YES];,省去一部分的代理。
  2. 如果你还觉得整个控制器都比较乱,可以尝试下 MVVM 模式,要是你对函数响应式编程不熟,就只要MVVM模式的思想,别用 RAC。

我觉得,可以用KVO.
KVO 是提供对象属性被改变时的通知的机制。如果只对某个对象的值的改变感兴趣的话,就可以使用 KVO 消息传递。
图片描述
我看,你的需求,好多都是检测值的变化,使用KVO配合Target-Action,应该不错。
Objc.io对于消息传递机制,有篇文章,讲得特别清楚。

明显最好的解决方法就是采用 Rx 响应式编程。如果不习惯的话,其次可以使用闭包将子视图的交互处理传递到 VC 中进行处理。最后你还以采用代理或者通知的机制进行控制转移。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题