objective-c - 在 UITextfield 中输入文本后以编程方式更改焦点

标签 objective-c uikit tvos apple-tv

我有一个简单的 View ,它有两个 TextView 和一个按钮。所有控件都垂直放置。我可以使用 Remote 从一个控件导航到另一个控件。但是,我正在尝试让以下场景正常工作:

  1. 用户启动应用程序(焦点在第一个文本字段上)
  2. 用户输入文本框并使用全屏键盘,然后点击“下一步”按钮
  3. 应用程序显示第二个文本字段(全屏键盘),输入一些文本并点击“完成”按钮
  4. 应用离开全屏键盘并聚焦按钮

虽然第 1-3 步开箱即用,但以编程方式更改焦点 (4) 不起作用。这是一些代码:

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if(textField == self.textfieldB) {
        self.activeView = self.textfieldB;
        [self setNeedsFocusUpdate];
        [self updateFocusIfNeeded];
        return YES;
    } 
    return NO;
}

并且在 - (UIView *)preferredFocusedView 中,我将返回存储在 self.activeView 中的任何内容(是的,它将返回按钮实例)。所有方法都按预期调用,但焦点不会改变。我在这里做错了什么?

提前致谢!

最佳答案

根据 this developer forums thread行为是故意的:

When dismissing a presented view controller, like a fullscreen keyboard, UIKit will automatically return focus back to where it was when that view controller was first presented, if that view is still focusable. This is so that focus automatically returns back to where the user would expect it to be. There is currently no mechanism for overriding this behavior.

在类似的情况下,我在从键盘屏幕返回后延迟切换了焦点。这是一个丑陋的 hack,我希望 UIKit 对此不要那么自以为是。

关于objective-c - 在 UITextfield 中输入文本后以编程方式更改焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34913461/

相关文章:

ios - 第二个 UIMenuController 没有隐藏

ios - 在 IBDesignableTextField 上的何处设置颜色

swift - 使用 Swift 2 测试 CloudKit 中是否存在记录

ios - tvOS - 管理订阅页面

objective-c - 奇怪的 XCode 4.2 和核心数据行为

objective-c - RestKit 对象映射失败取决于属性名称

ios - 在我的 UILabel(4 行)的子部分(2 行)上应用 lineBreakMode

objective-c - 如何在 Core Data 中存储 CLPlacemark 地址数据

ios - 滚动时 UItableView 弃用单元格

swift - 使用 tvOS 实现基本动画