自定义 UIResponder 子类

Posted

技术标签:

【中文标题】自定义 UIResponder 子类【英文标题】:Custom UIResponder subclass 【发布时间】:2014-10-24 17:21:52 【问题描述】:

是否可以设置自定义UIResponder 子类?我需要为UIEvents(特别是远程控制事件)实现一个监听器,它将在应用程序的整个生命周期中传递。

如果可能的话,我会尽量避免使用UIViewControllers(将在某个时候被释放)和AppDelegate(如果可能的话,我不想给它增加负担)。

【问题讨论】:

AppDelegate 似乎是放置此代码的理想位置。 AppDelegate 协议参考中提到的要点之一是,“它响应以应用程序本身为目标的事件,而不是特定于应用程序的视图或视图控制器。”我不认为你应该担心它的负担。 【参考方案1】:

显然你可以子类化 UIResponder 并且你可以创建那个子类的实例。问题在于将该实例放入响应者链中,以便实际调用其 UIResponder 方法,并且以不中断响应者链的其余部分的方式。这可能是可能的——我当然在桌面的 Cocoa 中做过,虽然从来没有在 ios 设备上的 UIKit 中做过——但在我看来,你会做得更好,对你为什么有这种特殊的厌恶将代码放在它明显想去的地方(在 UIViewController 或应用程序委托中)。

【讨论】:

我不确定这个责任是否属于应用委托。它是自定义事件,可以说应该由自定义对象处理(而不是通过 AD 漏斗),就像旋转事件或触摸事件一样。 但这只是建筑美学的一个小问题;您总是可以将该功能分解为属于应用程序委托或视图控制器的辅助对象(请参阅设计模式)。那不是重点。关键是 Cocoa 是一个框架:这意味着你必须把你的代码放在它实际上会被调用的地方。视图控制器或应用程序委托中的入口点是您的代码将被调用的地方。使用它并继续前进。 当然,我不会反对框架。你在问我为什么我希望做一个更干净的休息。 “特殊厌恶”表示您希望我澄清。这可能是微不足道的,但如果可能的话,我会使用它。因此是最初的问题。

以上是关于自定义 UIResponder 子类的主要内容,如果未能解决你的问题,请参考以下文章

touchesBegan 在 uiresponder 的子类中被忽略

OpenGL 游戏引擎能否创建它自己的 UIResponder 子类,类似于 Sprite Kit 为 SKNode 所做的?

为啥 UIViewController 是 UIResponder 的子类?

iOS控件之UIResponder类

UIResponder学习

UIResponder学习 手势