【问题标题】:Can non View class become a FirstResponder?非 View 类可以成为 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

【问题讨论】:

    标签: ios objective-c motionevent shake uiresponder


    【解决方案1】:

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

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

    【讨论】:

    • 我正在尝试构建一个可以嵌入到任何应用程序中的框架,因此我无法修改应用程序的 ViewControllers。至于becomeFirstResponder,我在MyEventHandler 类中调用它,而不是在视图中。而MyEventHandler 只继承自UIResponder
    • @oranJess 我现在正在做这件事,你明白了吗?
    猜你喜欢
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多