2011-02-25 137 views
2

我对Objective-C和Cocoa相对来说比较陌生......我一直在试着了解如何在Cocoa/Cocoa Touch中正确实现MVC模式很长一段时间。 ..我理解它背后的想法;它在概念上是完全意义上的:一个模型包含数据,一个视图是用户看到并可以交互的视图,而控制器则充当两者之间的桥梁。视图不能与模型交谈,模型不能与视图交谈。得到它了。如何让uiview与控制器交谈

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

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

在此先感谢您提供有关该做什么或在哪里寻找的建议。

回答

1
  1. 可可这样做的标准方式是委托模式(参见UITableViewDelegate)。你的视图类将声明一个委托协议,控制器将自己设置为视图的委托。然后,该视图会调用您想要与控制器通信的某个委托方法。

  2. 另一种方法是自己实现视图的目标动作机制。如果您从UIControl(仅调用sendActionsForControlEvents:)子类中获得或多或少的免费,但实现对任何自定义类都以相同方式工作的系统非常容易。 (编辑:我想第三种方法是让控制器观察视图的属性(使用KVO)。这不能很好地传达触摸事件,但如果你想通知触摸事件是一种可行的方式控制器关于状态变化或类似的情况。)

+0

非常感谢您的明确回应。我不知道使用委托模式是很常见的做法。我在Apple的一些示例代码中看到了这种方法,但是假设他们将它用于超出我想要做的其他原因。再次感谢。 – ChrisB 2011-02-25 21:37:28