UI控件之间的通信

时间:2012-07-27 00:41:34

标签: objective-c

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

在MyImageView的代码中,我正在对触摸事件做一些工作以获取被触摸的像素的颜色,并希望用该内容更新我的UILabel。由于MyImageView和UILabel都作为MyViewController中的实例驻留,因此实现此通信的一些典型方法是什么?

来自C ++我会向MyImageView

添加这样的东西

- (无效)registerMyLabel:(的UILabel *)标签;

然后在MyViewController初始化的某个地方使用上面的方法用MyImageView注册UILabel实例。我确信我可以在这里使用类似的技术,但我想知道......有没有一个内置的机制来实现Objective-c中的UI控件吗?

你会如何构建这个?

1 个答案:

答案 0 :(得分:2)

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

触摸处理是视图的责任还是控制器的责任受制于不同的哲学,但是我们假设我们将视图定义为具有颜色检测能力。检测到颜色后,MyImageView应通过委托协议或发布NSNotification让控制器知道。一旦给出该信息,控制器就会根据标签做任何需要的事情。

(在很多情况下,由于耦合较松散,我比代表更喜欢通知。)

在任何情况下,如果控制器负责在需要它的其他部分之间传递事件和数据,那么它更符合MVC。