例如:
controller
有一个redCustomView
,其中greenCustomView
为buleCustomView
,button
。
问题:
如何在点击controller
时向button
发送回叫消息?
我的解决方案:
blcok to block
发送回调消息视图; delegate to delegate
发送回调消息视图; notification
从view
向controller
发送回调邮件。问题:
使用block
或delegate
看起来如此庞大;
使用notification
?每个人都可以收到此通知消息,因此我认为这不是一个更好的方式。
奇迹:
还有其他更好的方法来优雅地解决这个问题吗?
答案 0 :(得分:1)
从长远来看,您需要使基础架构简洁且可测试。因此,我建议使用MVVM方法,并使用绑定的概念,通过viewController的回调函数做任何你想做的事情。使用此选项,您的视图模型将绑定到您的视图,并且在按钮单击时将自动 调用代码 当您开始发现这一点时,您会同时看到您的大量viewController 缓慢而缓慢地变为简洁而干净的类。如果你不太了解MVVM binding,那对你来说就像是中文。相信我,一旦你习惯了,你会毫不犹豫地使用它。
答案 1 :(得分:1)
我做的是走到响应链,直到我来到视图控制器。这在您的使用案例中非常简单 - 按钮点击 - 因为您只需要为按钮提供 nil-targeted action ,运行时将为您在视图控制器中找到处理程序实现。
答案 2 :(得分:0)
要找到优雅的解决方案,只需要查看Apple自己的观点即可。例如,UITableView有一个必须采用UITableViewDelegate协议的委托。通过视图向代表通知用户交互,例如tableview:didSelectRowAtIndexPath:。所以,优雅的解决方案"在这种情况下是协议/代表。但是,如果您在viewDidLoad中构建视图层次结构而不是构建真实的自定义视图(例如UIControl的子类),那么目标操作方法是一种常见的解决方案。