在我的父视图控制器中,我有这个:
- (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];
}
在我想处理远程控制事件的任何子视图控制器中,我这样做:
- (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent {
if (receivedEvent.type == UIEventTypeRemoteControl) {
switch (receivedEvent.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
{
//do something
break;
}
default:
break;
}
}
}
问题是事件是在其中一个子类中接收的,而不是在另一个子类中接收的,即使它们非常相似。它们以相同的方式呈现。它们都没有覆盖viewDidAppear,因此它们应该在它们出现时成为第一响应者并接收远程控制事件。
所以我的问题是,什么可能使一个视图控制器失去第一响应者状态?
编辑: 一些调试日志显示视图控制器实际上是第一个响应者。但由于某种原因,它没有收到这些事件。
答案 0 :(得分:-2)
尝试以下方法:
[self resignFirstResponder];