- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很难准确理解响应程序链在 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/
如果我目前没有与应用程序进行任何交互(没有选择文本字段等...),是否还有第一响应者对象?正如我测试的那样,如果我向响应者链发送一条消息,那么当前的 ViewController.view 会收到它,
这个问题在这里已经有了答案: first responder is not being set correctly (2 个答案) 已关闭10 年前。
我创建了一个应用程序,在 ViewController.m 和 viewDidLoad 中,我编写了以下代码 for (UIView* v in self.view.subviews){
我正在尝试让摇动手势起作用。这是一些代码 在我的实现文件中 - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
对于我的自定义单元格,举个简单的例子,我只有一个 UITextField,有没有办法让 刚刚插入的单元格 becomeFirstResponder insertRowsAtIndexPaths ? 我
我需要跟踪哪个文本字段是我的自定义键盘工作的 firstResponder。在下面的代码中,我大大简化了我的程序,但这是问题的要点: @implementation SimplePickerViewC
我在让文本字段接受 becomeFirstResponder 指令时遇到问题。 我提供了一种自定义机制来在导航栏中创建标题。我有另一个 View Controller 成功地使用了同样的技术。在 vi
为什么我的 InterfaceBuilder 文件中的 FirstResponder 缺少 redo: 连接(在 Received Actions 列表中)? undo: 存在,但 redo: 不存在
你知道(你能看到)为什么我不能退出 FirstResponder 并隐藏键盘吗? 仅供引用:Xcode 9 import UIKit class ViewController: UIViewContr
所以我正在制作一个应用程序,但在从 UISearchBar 和 UITextFields 中关闭键盘时遇到了一些问题。这是我的应用程序的结构: NavigationController -> View
我正在开发一个具有主窗口和多个面板窗口的 Cocoa 应用程序。 当用户通过单击主窗口等离开文本字段时,我需要在 NSTextField(位于面板窗口上)上自动保存一些文本。到目前为止,我已经尝试通过
我有一个 UITextView。我实现了一个导航栏 UIBarButtonItem 来响应触摸并为我的 UITextView 退出 firstResponder。 但是,当调用选择器方法时,键盘不会消
我在 tableviewcontroller 中设置了一个 searchBar。我引用了这个类似的问题 UISearchBar cannot become first responder after
我有一个 Mac 应用程序,它由一个窗口组成,其中包含数量可变的 Pane ,每个 Pane 都包含一个表格 View 。该窗口有一个带有按钮的工具栏,我希望当前选定 Pane 的 VC 能够处理验证
在viewDidLoad()中: searchController = UISearchController(searchResultsController: nil) let cancelButto
我有一个名为 songInfoView 的 View ,其中包含 3 个 UITextFields 和一个 UIButton。我在父 View 中创建一个临时 UITextField 以调出键盘并将
我知道这个问题可能有很多关于 SO 的答案。但是在尝试了在互联网上找到的所有解决方案之后(加上我的一些自定义发明..)我仍然无法实现我想要实现的目标。 故事是这样的: 我有一个 UICollectio
我有四个 UITextField,每个代表 OTP 的一个数字。我希望控件在用户输入代码时转移到连续的文本字段。我的实现如下。 extension FillSignUpCodeController:
我有 UIViewController 并为其 View 创建了自定义类。顺便说一句,我在该类中重新定义了方法“canBecomeFirstResponder”,因此它始终返回 true。当调用 vi
我使用以下代码修改框架大小以适应显示/消失的键盘: - (void)moveCodeViewForKeyboard:(NSNotification*)aNotification up:(BOOL)up
我是一名优秀的程序员,十分优秀!