내 응용 프로그램의 UI와 관련이없는 사용자 정의 클래스 (MyEventHandler)가 있습니다. 나는 그것이 MotionShake 이벤트를 잡을 수 있기를 바랍니다. 이해할 수 있도록 MyEventHandler를 첫 번째 응답자로 만들어야합니다.비 뷰 클래스가 FirstResponder가 될 수 있습니까?
다음은 내가 수행 한 작업입니다. MyEventHandler
을 UIResponder
에서 상속 받고 canBecomeFirstResponder
메서드를 구현했습니다. 그러나 becomeFirstResponder
을 호출하면 0을 반환하므로 [self isFirstResponder]
도 반환됩니다.
현재 응답자를 확인한 결과 nil
으로 나타났습니다.
내 ViewController와 동일한 작업을 수행하면 제 질문이 생깁니다. 첫 번째 응답자 인 UIView에서 상속받지 않는 사용자 지정 클래스를 만들 수 있습니까? 당신이보기 계층 구조에없는 뷰 오브젝트에 becomeFirstResponder
를 호출 할 경우,이 전무를 반환합니다
@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
내가 어떤 응용 프로그램에 포함 할 수있는 프레임 워크를 구축하기 위해 노력하고있어, 그래서 나는 앱의 ViewController를 수정할 수 없다. 'becomeFirstResponder'에 대해서는 뷰가 아닌'MyEventHandler' 클래스에서 호출합니다. 그리고 MyEventHandler는 UIResponder 만 상속받습니다. – oranJess