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

Chr*_*zor 5 objective-c uikit apple-tv tvos

我有一个简单的视图,它有两个文本视图和一个按钮。所有控件都垂直放置。我可以使用遥控器从一个控件导航到另一个控件。但是,我正在尝试使以下场景起作用:

  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;
}
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

zou*_*oul 1

根据此开发者论坛帖子,该行为是故意的:

\n\n
\n

当关闭呈现的视图控制器(如全屏键盘)时,UIKit 会自动将焦点返回到该视图控制器首次呈现时的位置(如果该视图仍然可聚焦)。这样焦点就会自动返回到用户期望的位置。目前没有机制可以覆盖此行为。

\n
\n\n

在类似的情况下,我从键盘屏幕返回后延迟切换焦点。它\xe2\x80\x99是一个丑陋的黑客,我希望UIKit对此没有那么固执己见。

\n