如何让uiview与控制器交谈

时间:2011-02-25 19:02:51

标签: cocoa-touch model-view-controller uiview

我对Objective-C和Cocoa相对较新......我一直在努力了解如何在Cocoa / Cocoa Touch中正确实现MVC模式很长一段时间......我理解它背后的想法;它在概念上完全有意义:模型保存数据,视图是用户看到并可以与之交互的内容,控制器充当两者之间的桥梁。视图无法与模型对话,模型无法与视图对话。明白了。

对我来说没有意义的是如何有效地使用MVC ...如果用户只能与视图交互,并做一些事情与之交互(即对于iPhone应用程序,用户点击/拖动子类UIView,触发“touchesBegan”和“touchesMoved”方法等),视图如何将这些事件传达给控制器?

我在网上看了无数的例子和论坛,但还没有找到一种简化的通用方式来实现这个...我知道如何通过按钮,滑块和其他可以连接到的东西与控制器进行通信一个出口,但对于没有目标 - 行动机制的东西,最好的方法是什么?

提前感谢有关做什么或在哪里寻找的任何建议。

1 个答案:

答案 0 :(得分:1)

  1. Cocoa中执行此操作的标准方式是委托模式(参见UITableViewDelegate)。您的视图类将声明一个委托协议,控制器将自己设置为视图的委托。然后,只要想要与控制器进行通信,视图就会调用您定义的委托方法之一。

  2. 另一种方法是自己为您的视图实现目标 - 动作机制。如果你从UIControl继承(只是调用sendActionsForControlEvents:),你或多或少会免费得到这个,但实现一个对任何自定义类都有相同工作方式的系统非常容易。

    < / LI>
  3. (编辑:我想第三种方法是让控制器观察视图的属性(使用KVO)。这不能很好地传达触摸事件,但如果你想通知它是一种可行的方法关于状态变化的控制器或类似的东西。)