touchesBegan 在 uiresponder 的子类中被忽略
Posted
技术标签:
【中文标题】touchesBegan 在 uiresponder 的子类中被忽略【英文标题】:touchesBegan ignored in subclass of uiresponder 【发布时间】:2012-01-26 11:47:57 【问题描述】:使用目标 c 并使用 xcode 开发 ios 应用程序。我有一个继承自另一个继承自 UIResponder 的类的类,它包含一个视图。我在子类中有一个 touchesBegan,但只有在调试/开发模式下运行应用程序时才会调用该事件。当我进行生产/发布构建时,不会调用触摸事件。
// Basic viewcontroller protocol
@protocol SubViewController
- (void)viewDidAppear:(BOOL)animated;
- (void)viewDidDisappear:(BOOL)animated;
- (void)viewWillAppear:(BOOL)animated;
- (void)viewWillDisappear:(BOOL)animated;
- (void)viewDidLoad;
-(UIView *)view;
@end
@interface SubViewController : UIResponder<SubViewController>
/////////////////////////////////////////////////////////////////////////////////
// A custom subview controller
//
@interface mySubViewController : SubViewController
在 mysubviewcontroller 类中我有
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
//some code and magic
现在正如我所说,在调试中运行它很好,但在发布时会忽略触摸事件。请说任何有助于澄清这一点的提示、想法或问题。提前致谢
编辑:我在文档中看到了这一点“如果您在不调用 super(一种常用模式)的情况下覆盖此方法,您还必须覆盖处理触摸事件的其他方法,如果只是作为存根(empy)实现。”所以我在所有其他触摸事件中存根,但发布版本没有变化
【问题讨论】:
您没有继承UIViewController
(已经继承自UIResponder
)的任何特殊原因?我怀疑您的自定义 UIResponder
子类未正确添加到响应者链中。
hmm 我如何检查子类是否已添加到响应者链中?或者添加它的正确方法是什么?我确定没有子类化 uiviewcontroller 是有原因的,但我现在想不起来了,而且是很久以前写的。
参见UIViewController
文档中的第 3 段。基本上,您需要在您正在管理的视图和“视图控制器”中覆盖nextResponder
。视图将返回视图控制器,视图控制器将返回视图的父视图。
试试这个,然后回复你。任何想法为什么它会在调试时工作?
干得好欢呼。那里发生了一些奇怪的事情。现在是响应者链的一部分。你想这样做作为答案,或者我可以接受它
【参考方案1】:
由于您没有继承 UIViewController
(它会自动执行此操作),因此您需要手动将响应者添加到响应者链中。
UIViewController
在响应者链中的位置介于其视图和视图的父视图之间,因此要获得相同的行为,您需要在视图和管理它的控制器中覆盖 nextResponder
。视图应该返回控制器,控制器应该返回视图的父视图。
【讨论】:
以上是关于touchesBegan 在 uiresponder 的子类中被忽略的主要内容,如果未能解决你的问题,请参考以下文章