私の親View Controllerにはこれがあります:
- (BOOL)canBecomeFirstResponder
{
return YES;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"BECOMING FIRST RESPONDER");
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
- (void) viewWillDisappear:(BOOL)animated {
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
[super viewWillDisappear:animated];
}
リモートコントロールイベントを処理したい子View Controllerで、これを行います:
- (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent {
if (receivedEvent.type == UIEventTypeRemoteControl) {
switch (receivedEvent.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
{
//do something
break;
}
default:
break;
}
}
}
問題は、子クラスの 1 つでイベントが受信され、他の子クラスでは非常に似ているにもかかわらず、イベントが受信されないことです。それらは同じ方法で提示されます。どちらも viewDidAppear をオーバーライドしないため、表示されてリモート コントロール イベントを受信すると、どちらもファーストレスポンダーになる必要があります。
私の質問は、1 つのビュー コントローラーがファーストレスポンダーのステータスを失った原因は何ですか?
編集: 一部のデバッグ ログは、View Controller が実際にはファーストレスポンダであることを示しています。しかし、何らかの理由でイベントを受信していません。