Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何恢复以前的第一响应者?_Iphone_Objective C_Cocoa - Fatal编程技术网

Iphone 如何恢复以前的第一响应者?

Iphone 如何恢复以前的第一响应者?,iphone,objective-c,cocoa,Iphone,Objective C,Cocoa,我在理解iPhone应用程序中应答器链是如何工作的方面遇到了一些困难 我的情况如下。我有两个UIViewController,它们安装在选项卡栏控制器上。称它们为视图控制器A和B。它们是不相关的,因为它们都没有引用,也不知道对方 A和B都需要响应遥控事件(播放/暂停/停止按钮)。控制器A希望随时响应这些事件,而B只希望在用户选择某个功能时响应这些事件。当我的应用程序启动时,A立即成为第一响应者,能够接收远程控制事件。当B想要接收事件时,它成为第一响应者,然后开始获取事件而不是A 当使用遥控器执行

我在理解iPhone应用程序中应答器链是如何工作的方面遇到了一些困难

我的情况如下。我有两个UIViewController,它们安装在选项卡栏控制器上。称它们为视图控制器A和B。它们是不相关的,因为它们都没有引用,也不知道对方

A和B都需要响应遥控事件(播放/暂停/停止按钮)。控制器A希望随时响应这些事件,而B只希望在用户选择某个功能时响应这些事件。当我的应用程序启动时,A立即成为第一响应者,能够接收远程控制事件。当B想要接收事件时,它成为第一响应者,然后开始获取事件而不是A

当使用遥控器执行B时,会出现问题。此时,B在其自身上调用resignFirstResponder。此后,A和B都不会获得任何远程控制事件

我假设当B退出第一响应者状态时,以前是第一响应者的东西将被恢复。不是这样吗

如果没有,我如何将A恢复到第一响应者?请记住,A和B是单独的选项卡,因此B没有对A的引用,也不知道A应该是第一响应者。因此,我不想显式地调用A上的becomeFirstResponder。相反,我需要的是一种获取前一个FirstResponder并恢复它的方法(我认为)。我有点困惑,为什么这不是自动发生的

谢谢, Frank

以及该报告表明,响应者链并没有按照您的预期进行精确的布局。它不是一个潜在的响应者的链接链,可以连接到和从中拉出。相反,它与当前呈现给用户的视图层次结构直接关联

这意味着,当B退出第一响应者时,B的视图控制器(如果有)或其superview成为第一响应者,假定is已实现
可以成为第一响应者:
。如果不行,视图控制器或superview将成为第一响应者,一直到
UIApplication


如果A和B不在一个层次结构中,其中一个是另一个的子视图,则当B辞职时,响应者链不会将第一响应者返回给A。取而代之的是,B将把第一响应者让给它的superview。您最可能想做的是在A和B上方的视图中实现
成为第一响应者:
。该方法只需将第一响应者交给A。这样,B就可以抓住第一响应者,然后,当它辞职时,superview会将其交还给A。

谢谢,我又做了一些实验,你的解释很有道理。实际上,视图B是否成为第一响应者并不重要。一旦我切换到它的选项卡,视图A就不再是第一响应者,不再获取远程控制事件。在我的例子中,常见的超级视图可能是选项卡栏控制器的视图。我是否必须将UITabBarController子类化才能执行我想要的操作?是的-子类化UITabBarController似乎可以工作。当没有其他人在侦听时,子类将获取远程控制事件。现在我所要做的就是找出一种优雅的方式将事件发送到正确的地方。调用A的“becomeFirstResponder:”方法将第一响应者交给A.IIRC。