非 View 类可以成为 FirstResponder 吗?
Posted
技术标签:
【中文标题】非 View 类可以成为 FirstResponder 吗?【英文标题】:Can non View class become a FirstResponder? 【发布时间】:2014-04-15 10:09:59 【问题描述】:我有一个自定义类 (MyEventHandler),它与我的应用程序中的 UI 无关。我希望它能够捕捉到 MotionShake 事件。据我了解,我需要让 MyEventHandler 成为第一响应者。
这就是我所做的。
我从UIResponder
继承了MyEventHandler
并实现了canBecomeFirstResponder
方法。但是,当我调用becomeFirstResponder
时,它返回 0,[self isFirstResponder]
也是如此。
我检查了当前的第一响应者,结果是nil
。
如果我用我的 ViewController 做同样的事情,它可以正常工作,所以我的问题是:是否有可能创建一个不从 UIView 继承的自定义类,作为第一响应者?
这是我的代码:
@interface MyEventHandler : UIResponder
- (void)start;
@end
@implementation MyEventHandler
- (void)start
[self becomeFirstResponder];
- (BOOL)canBecomeFirstResponder
return YES;
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
if (motion == UIEventSubtypeMotionShake)
NSLog(@"Shake-shake-shake!");
@end
【问题讨论】:
【参考方案1】:如果您对不在视图层次结构中的 View 对象调用 becomeFirstResponder
,它将返回 nil。
出于您的目的,当您在 ViewController 上收到运动事件时,您可以使用通知告诉您的自定义类 (MyEventHandler
)
【讨论】:
我正在尝试构建一个可以嵌入到任何应用程序中的框架,因此我无法修改应用程序的 ViewControllers。至于becomeFirstResponder
,我在MyEventHandler
类中调用它,而不是在视图中。而MyEventHandler
只继承自UIResponder
。
@oranJess 我现在正在做这件事,你明白了吗?以上是关于非 View 类可以成为 FirstResponder 吗?的主要内容,如果未能解决你的问题,请参考以下文章