专注于 iPhone 上的下一个有效键视图

Posted

技术标签:

【中文标题】专注于 iPhone 上的下一个有效键视图【英文标题】:Focus on next valid key view on iPhone 【发布时间】:2010-07-13 22:11:04 【问题描述】:

是否有与 Mac OS X 中的 NSResponder 方法 -selectNextKeyView-nextValidKeyView 等效的 iPhone?我知道-becomeFirstResponder 方法,但是当视图层次结构变得更加复杂时,找出调用哪个视图并不是很漂亮。

必须有某种方法可以找出这一点,因为当我在 iPhone 模拟器中按 Tab 时,焦点确实正确转到下一个 UITextField。这让我想知道当我按下 Tab 时究竟会发生什么。有什么想法吗?

更新:这正是我想要的,但 _nextKeyResponder 是私有 API,所以不能。有什么方法可以在不使用私有 API 的情况下进行“假”标签按键?

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
    // Try to find next responder
    UIView *nextResponder = (UIView *)[self.view _nextKeyResponder];

    if (nextResponder) 
        // Found next responder, so set it.
        [nextResponder becomeFirstResponder];
        [self.tableView scrollRectToVisible:[self.tableView convertRect:[nextResponder frame] fromView:nextResponder] animated:YES];
     else 
        // Not found, so remove keyboard.
        [textField resignFirstResponder];
    
    return NO; // We do not want UITextField to insert line-breaks.

【问题讨论】:

【参考方案1】:

NSResponder-selectKeyView-nextValidKeyView 没有公开的 ios 等效项。

当第一响应者是UITextField 的实例时,按 Tab 会实例化 UIEvent 的私有子类,该子类会传递给 -[UIApplication sendEvent:],而后者又会调用 -[UIView _nextKeyResponder]

-[UIView _nextKeyResponder] 并不像你想象的那样工作。它将关键视图链视为一个循环,因此您的else 块将永远不会到达。出于同样的原因,即使有用于合成键盘事件的公共 API,您也可能不想使用它。

相反,您可能想要类似于UIWebView 的基于UIToolbar 的表单输入附件。它的按钮可以在适当的时候启用和禁用,它的代理处理实际的按钮按下操作。

但是,要以一般方式实现这样的委托,查看how -[UIView _nextKeyResponder] is implemented 可能会有所帮助。

【讨论】:

不错的答案!我很欣赏你所讲的细节。【参考方案2】:

UITextField 委托-textFieldDidEndEditing: 中,在各种文本字段之间切换(例如,通过测试文本字段的tag 属性)。

当你匹配一个文本字段时,设置另一个文本字段或其他控件成为下一个响应者。

【讨论】:

正如我在问题中所写的,我知道这种方法。我只是想知道是否可以在处理选项卡时以某种方式利用 iOS 中已有的内容。【参考方案3】:

我很惊讶似乎没有其他人在 iOS 上解决了这个问题。

我设计了一个解决方案,它可以同时处理 Tab 和 Shift+Tab 以在 iOS 上前进和后退到您想要的任何字段,并且不使用任何私有 API。

这里是文章:http://weaklyreferenced.wordpress.com/2012/11/13/responding-to-the-tab-and-shift-tab-keys-on-ios-5-ios-6-with-an-external-keyboard/

【讨论】:

以上是关于专注于 iPhone 上的下一个有效键视图的主要内容,如果未能解决你的问题,请参考以下文章

iOS 12 将专注于性能提升 / iPhone 减产让苹果市值蒸发 353 亿美元 / 小米或将发布 MIX 2S|灵感早读

手动触发专注于输入 Iphone 问题

专注于一个窗口形式的多个列表视图

如何专注于表格视图中视图之外的文本字段?

可访问性:专注于视图

按钮不可访问且未专注于 Tab 键