Установить делегата приложения в качестве первого ответчика

#objective-c #xcode #shake #becomefirstresponder

#objective-c #xcode #встряхнуть #станьте первым ответчиком

Вопрос:

Я пытаюсь реализовать распознавание встряхивания, которое работает во всем моем приложении. Чтобы сделать это, я добавляю следующий код в свой xxxAppDelegate.m:

 -(BOOL)canBecomeFirstResponder {
    return YES;
}

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
    if (event.type == UIEventSubtypeMotionShake) {
        NSLog(@"Shaken, not stirred.");
    }
}
  

Но поскольку в файле .h делегат определен как

 @interface xxxAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>
  

Я не могу использовать

 [self becomeFirstResponder];
  

в .m, чтобы приложение делегировало первого ответчика. Поэтому, конечно, это не работает.
Какой был бы наилучший способ заставить это работать?

Ответ №1:

Что произойдет, если вы измените делегат приложения на подкласс UIResponder ?

Редактировать

Вы можете прочитать о цепочке ответчиков здесь в документации.