0

假设我有一个 UIViewController (MyViewController) 的子类,它在它自己的视图中,一个 UIImageView (MyImageView) 的子类和一个标准的 UILabel。

在 MyImageView 的代码中,我正在对触摸事件进行一些工作以获取被触摸像素的颜色,并希望使用该内容更新我的 UILabel。由于 MyImageView 和 UILabel 都作为实例存在于 MyViewController 中,有哪些典型的方法可以实现这种通信?

来自 C++ 我会在 MyImageView 中添加这样的东西

-(void)registerMyLabel:(UILabel*)label;

然后在 MyViewController 初始化的某个地方使用上面的方法将 UILabel 实例注册到 MyImageView 中。我确信我可以在这里使用类似的技术,但我想知道......是否有内置机制可以使用 Objective-c 中的 UI 控件执行此操作?

你会如何构建这个?

4

1 回答 1

2

我会让视图控制器完成视图之间的通信工作。

触摸处理是视图的职责还是控制器的职责取决于不同的理念,但假设我们将视图定义为具有颜色检测能力。一旦检测到颜色,MyImageView应该通过使用委托协议或发布NSNotification. 一旦给出了这些信息,控制器就会对标签做任何它需要的事情。

(在许多情况下,我更喜欢通知而不是委托,因为耦合更松散。)

无论如何,如果控制器负责在需要它的其他部分之间传递事件和数据,则它更符合 MVC。

于 2012-07-27T00:53:42.847 回答