11

在 iOS 6 中,我习惯于在viewDidLoad.

- (void)viewDidLoad
{
    [super viewDidLoad];

    [txtField becomeFirstResponder];
}

这样,当 navigationController 推送新的 viewController 时,键盘已经存在,从左到右平滑动画,避免了自下而上的动画。

在 iOS 7 中,这种行为似乎被破坏了。

如果我添加[txtField becomeFirstResponder]viewDidLoad键盘出现在推动动画的中间,已经在它的最终位置:一个不愉快的效果!

我试过搬进[txtField becomeFirstResponder]viewWillAppear,但最终结果没有改变。

你知道一种方法来恢复 iOS 6 的行为,将新的 viewController 和键盘一起推送吗?

编辑:使用计时器也不起作用......无论我设置什么时间延迟,键盘仅在推动动画结束时显示。

到目前为止,我最好的尝试是[txtField becomeFirstResponder]放入viewWillLayoutSubviewsor viewDidLayoutSubviews。不幸的是,这样做在推动 viewController 时起作用,但在弹回时不起作用(键盘没有出现)。

4

1 回答 1

13

我已经设法推断出你的解决方法viewWillLayoutSubviews来强制它工作。

- (void)viewWillLayoutSubviews {

    if (![self.textField1 isFirstResponder] && ![self.textField2 isFirstResponder] && ...) {
        [self.textField1 becomeFirstResponder];
    }
}

这对我来说既适用于推入堆栈,也适用于关闭模态视图控制器后。

于 2013-10-22T12:21:38.220 回答