我有一个简单的视图,它有两个textview和一个按钮。所有控件都垂直放置。我可以使用遥控器从一个控件导航到另一个控件。但是,我正在尝试使以下方案工作:
虽然步骤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,行为是有意的:
当解除所呈现的视图控制器(如全屏键盘)时,UIKit将自动将焦点返回到首次显示该视图控制器时的焦点,如果该视图仍可调焦。这样焦点会自动返回到用户期望的位置。目前没有覆盖此行为的机制。
在类似的情况下,我从键盘屏幕返回后延迟切换焦点。这是一个丑陋的黑客,我希望UIKit对此并不那么自以为是。
如果包含UIViewController的restoresFocusAfterTransition设置为false,则可以更改它
只需设置restoresFocusAfterTransition = false,然后覆盖preferredFocusEnvironments