假设我有一个UIViewController(MyViewController)的子类,它有自己的视图,UIImageView(MyImageView)的子类和标准的UILabel。
在MyImageView的代码中,我正在对触摸事件做一些工作以获取被触摸的像素的颜色,并希望用该内容更新我的UILabel。由于MyImageView和UILabel都作为MyViewController中的实例驻留,因此实现此通信的一些典型方法是什么?
来自C ++我会向MyImageView
添加这样的东西- (无效)registerMyLabel:(的UILabel *)标签;
然后在MyViewController初始化的某个地方使用上面的方法用MyImageView注册UILabel实例。我确信我可以在这里使用类似的技术,但我想知道......有没有一个内置的机制来实现Objective-c中的UI控件吗?
你会如何构建这个?
答案 0 :(得分:2)
我会让视图控制器完成视图之间的通信工作。
触摸处理是视图的责任还是控制器的责任受制于不同的哲学,但是我们假设我们将视图定义为具有颜色检测能力。检测到颜色后,MyImageView
应通过委托协议或发布NSNotification
让控制器知道。一旦给出该信息,控制器就会根据标签做任何需要的事情。
(在很多情况下,由于耦合较松散,我比代表更喜欢通知。)
在任何情况下,如果控制器负责在需要它的其他部分之间传递事件和数据,那么它更符合MVC。