Cocoa touch 如何让uiview与控制器对话

Cocoa touch 如何让uiview与控制器对话,cocoa-touch,model-view-controller,uiview,Cocoa Touch,Model View Controller,Uiview,我对Objective-C和Cocoa比较陌生。。。很长一段时间以来,我一直试图理解如何在Cocoa/Cocoa Touch中正确实现MVC模式。。。我理解它背后的想法;它在概念上是完全有意义的:模型保存数据,视图是用户看到并可以交互的对象,控制器充当两者之间的桥梁。视图无法与模型对话,模型无法与视图对话。明白了 对我来说没有意义的是如何有效地使用MVC…如果用户只能与视图交互,并做一些事情与视图交互(例如,对于iPhone应用程序,用户在UIView的子类中单击/拖动,触发“touchesBe

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

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

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

提前感谢您提出的关于做什么或去哪里看的建议

  • Cocoa中实现这一点的标准方法是委托模式(参见
    UITableViewDelegate
    )。视图类将声明一个委托协议,控制器将自己设置为视图的委托。然后,只要视图想要与控制器通信,它就会调用您定义的委托方法之一

  • 另一种方法是为您自己的视图实现目标操作机制。如果您从
    UIControl
    (只需调用
    sendActionsForControlEvents:
    )创建子类,则或多或少可以免费获得此功能,但实现一个与任何自定义类工作方式相同的系统是相当容易的

  • (编辑:我认为第三种方法是让控制器观察视图的属性(使用KVO)。这在传达触摸事件方面效果不好,但如果您想通知控制器状态更改或类似情况,这是一种可行的方法。)


  • 非常感谢您的明确答复。我不知道使用委托模式是常见的做法。我在苹果的一些示例代码中看到了这种方法,但我认为他们使用这种方法的原因除了我想做的以外。再次感谢。