如何优雅地从嵌套的自定义视图向控制器发送回调消息?

时间:2018-04-18 12:36:06

标签: ios objective-c

例如:

controller有一个redCustomView,其中greenCustomViewbuleCustomViewbutton

问题:

如何在点击controller时向button发送回叫消息?

我的解决方案:

  1. 使用blcok to block发送回调消息视图;
  2. 使用delegate to delegate发送回调消息视图;
  3. 直接使用notificationviewcontroller发送回调邮件。
  4. 问题:

    使用blockdelegate看起来如此庞大;

    使用notification?每个人都可以收到此通知消息,因此我认为这不是一个更好的方式。

    奇迹:

    还有其他更好的方法来优雅地解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

从长远来看,您需要使基础架构简洁且可测试。因此,我建议使用MVVM方法,并使用绑定的概念,通过viewController的回调函数做任何你想做的事情。使用此选项,您的视图模型将绑定到您的视图,并且在按钮单击时将自动 调用代码 当您开始发现这一点时,您会同时看到您的大量viewController 缓慢而缓慢地变为简洁而干净的类。如果你不太了解MVVM binding,那对你来说就像是中文。相信我,一旦你习惯了,你会毫不犹豫地使用它。

答案 1 :(得分:1)

我做的是走到响应链,直到我来到视图控制器。这在您的使用案例中非常简单 - 按钮点击 - 因为您只需要为按钮提供 nil-targeted action ,运行时将为您在视图控制器中找到处理程序实现。

答案 2 :(得分:0)

要找到优雅的解决方案,只需要查看Apple自己的观点即可。例如,UITableView有一个必须采用UITableViewDelegate协议的委托。通过视图向代表通知用户交互,例如tableview:didSelectRowAtIndexPath:。所以,优雅的解决方案"在这种情况下是协议/代表。但是,如果您在viewDidLoad中构建视图层次结构而不是构建真实的自定义视图(例如UIControl的子类),那么目标操作方法是一种常见的解决方案。