gpt4 book ai didi

iphone - 如何恢复之前的firstResponder?

转载 作者:行者123 更新时间:2023-12-03 18:04:44 25 4
gpt4 key购买 nike

我很难准确理解响应程序链在 iPhone 应用程序中的工作原理。

我的情况如下。我有两个 UIViewController 安装在选项卡栏 Controller 上。称它们为 View Controller A 和 B。它们是不相关的,因为它们都没有引用或了解对方。

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

使用 Remote 完成 B 操作时出现问题。此时,B 对自身调用 resignFirstResponder 。此后,A和B都没有收到任何远程控制事件。

我假设当B放弃第一响应者身份时,之前作为第一响应者的东西将会恢复。这不是它的工作原理吗?

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

谢谢,弗兰克

最佳答案

The docs on UIResponder以及Event handling guide for iPhone OS表明响应者链的布局并不完全符合您的预期。它不是一个可以附加或拉出的潜在响应者的链接链。相反,它直接与当前呈现给用户的 View 层次结构相关联。

这意味着,当 B 放弃第一响应者时,B 的 View Controller (如果有)或其 super View 将成为第一响应者,假设已实现了 canBecomeFirstResponder:。如果不能, View Controller 或 super View 将成为第一响应者,一直到 UIApplication

如果 A 和 B 不在一个层次结构中,其中一个是另一个的 subview ,则当 B 辞职时,响应者链不会将第一响应者返回给 A。相反,B 将辞去其 super View 的第一响应者。您最可能想要做的是在 A 和 B 上方的 View 中实现 becomeFirstResponder:。该方法只需将第一响应者移交给 A。这样,B 就可以捕获第一响应者,然后,当它退出时, super View 会将其交还给 A。

关于iphone - 如何恢复之前的firstResponder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3222466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com