【问题标题】:Getting a view to respond to a sibling's touch event / message获取视图以响应兄弟的触摸事件/消息
【发布时间】:2009-06-25 23:08:57
【问题描述】:

我确定有正确的方法可以做到这一点,我是 Objective-c 和可可触摸的新手,所以我不知道它是什么。

我有一个应用程序具有(简化的)视图层次结构

Window
  --Button
  --Button
  --Subview
    --Sub-Subview

我想要做的是让子视图做一些事情来响应其中一个按钮上的触摸事件。我可以想出几种方法来做到这一点,但我不确定哪一种是首选方法。

  • 向主视图控制器添加一个插座(处理窗口)并存储对子视图的引用。当我需要给子视图发送消息时,我可以简单地传递我想要的消息(因为我已经有了参考)。这似乎可行,如果有点……脆弱?

  • 向按钮添加第二个操作(第一个是视图控制器上的方法,第二个是子视图类上的方法)。这似乎有问题,因为视图控制器中的按钮操作在子视图尝试处理消息之前触发很重要

  • 某种委托系统?

  • 为子视图编写一个新的视图控制器并让主视图控制器传递那个一条消息(不确定第一个控制器获取对第二个控制器的引用的正确方法。在此外,子视图实际所需的代码相对较少——一个全新的控制器似乎有点过头了)。

  • 还有什么我完全忽略的东西?

一些方向将不胜感激!

【问题讨论】:

    标签: iphone objective-c cocoa-touch interface-builder model-view-controller


    【解决方案1】:

    你说按钮在视图控制器(哪个视图控制器?)上有一个动作。并且您希望子视图上的操作/方法调用在该操作之后发生。因此,我建议您的视图控制器操作发布事件通知,并且子视图可以侦听该事件。或者,视图控制器可以连接到子视图。

    这确保了动作的顺序 - 大多数观察技术无法确保该顺序。

    Matt Gallagher 写了一篇很有用的文章,Five approaches to listening, observing and notifying in Cocoa,关于观察技术可能会对您有所帮助。

    【讨论】:

      【解决方案2】:

      对于 MVC 纯粹主义者的观点,所有逻辑都应该在控制器中。如果你只有一个控制器,那么逻辑应该去那里,而视图类只负责布局和显示。

      或者您可以使用另一个控制器,如果您的 UI 相当复杂,这可能是最佳选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多