繁体   English   中英

非View类可以成为FirstResponder吗?

[英]Can non View class become a FirstResponder?

我有一个自定义类(MyEventHandler),它与我的应用程序中的UI无关。 我希望它能够捕获MotionShake事件。 据我了解,我需要使MyEventHandler成为第一响应者。

这就是我所做的。 我从UIResponder继承了MyEventHandler ,并实现了canBecomeFirstResponder方法。 但是,当我调用becomeFirstResponder它返回0, [self isFirstResponder]也返回0。

我检查了当前的第一响应者,结果为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

如果在不在视图层次结构上的View对象上调用becomeFirstResponder ,它将返回nil。

为了您的目的,当您在ViewController上接收到运动事件时,可以使用通知来告诉您的自定义类( MyEventHandler

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM