在 UIResponder 链上发送事件?

Posted

技术标签:

【中文标题】在 UIResponder 链上发送事件?【英文标题】:Sending an event up the UIResponder chain? 【发布时间】:2012-06-27 13:59:26 【问题描述】:

我刚刚创建了一个自定义 UIViewController,其中包含一些用户操作,例如触摸。我想处理 parentObject 中的用户交互。换句话说,创建 ViewController 的那个。

在其他语言中,我习惯使用向上推送的事件。所以我的父对象会在 ViewController 对象的引用上有某种监听器,它可以对它做出反应。

Objective C 如何处理这种类型的交互?

【问题讨论】:

Mac/ios 世界使用委托模式来处理这种类型的交互。你肯定想查一下。 【参考方案1】:

这可以通过 1) 响应者链、2) 通知和 3) 委托来完成。

    所有 UI 对象形成响应者链,从当前聚焦的元素开始,然后是父视图,以此类推,通常直到应用程序对象。通过向 nib 中的特殊 First Responder 对象发送操作,您将把它扔到响应者链中,直到有人处理它。您可以使用这种机制来触发事件,而无需知道谁以及何时处理它们。这类似于 html 事件模型。

    NSNotificationCenter 发送的通知可以被任意数量的监听器接收。这是与例如最接近的模拟。 C# 事件。

    委托是向单个对象发送事件的最简单机制。该类声明了名为delegate 的弱属性,该属性可以分配给任何对象,以及该对象应该实现的协议。许多类使用这种方法;主要问题是您不能有多个这样的听众。

【讨论】:

谢谢 - 我会看看【参考方案2】:

您应该查看委托/委托以了解两个视图控制器之间的交互。您需要先了解它的工作原理。

https://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html

【讨论】:

我喜欢你的思维方式!【参考方案3】:

听起来您需要实现一个委托协议,这将允许您的“子”视图控制器与它的“父”进行通信

见http://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html

【讨论】:

以上是关于在 UIResponder 链上发送事件?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 事件处理之UIResponder简介

UIResponder相关

UIResponder 和事件传递的另一个问题

UIResponder学习

UIResponder学习 手势

在 Cocoa,UIResponder 中将消息从子视图发送到父视图?