iOS 9 - 在UIAlertView被解雇后弹出键盘

时间:2015-09-23 15:55:06

标签: ios keyboard uialertview ios9 uiresponder

我有一个奇怪的视觉错误,只影响iOS 9设备:

当您按下按钮时,我的应用程序的登录名UIViewController会运行并获得OAuth令牌,就像您期望的那样。如果我的API的响应返回特定的状态代码,我会弹出一个UIAlertView,说他们需要重置密码(如果他们在服务器端被标记为这样)。登录按钮后,登录resignFirstResponder的电子邮件和密码字段,标准内容。

仅在iOS 9上,如果您点击重置路径,则在该警报视图上点按“确定”,键盘会弹回,大概可能持续800毫秒,然后再次解除。这几乎就好像有什么东西排队等候呈现它,但警报的存在阻止了它直到你点击确定 - 它在警报响起之后绝对是瞬间的。

调试似乎非常棘手。我已经为becomeFirstResponder添加了符号断点,并且在此过程发生的任何地方都没有调用它。

关于我如何看待调试/修复此问题的其他任何想法?它不会影响iOS 7和iOS 8,只会影响iOS 9。

2 个答案:

答案 0 :(得分:14)

我在30分钟前遇到了这个问题。

自iOS9发布以来,UIAlertView已被弃用。

我们使用UIAlertController解决了这个问题,如下所示:

 UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Alert Title!" message:@"This is an alert message." preferredStyle:UIAlertControllerStyleAlert];

     UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
     [alertController addAction:ok];

     [self presentViewController:alertController animated:NO completion:nil];

这应该可以解决您的问题。

如果动画= YES,您可能会遇到与以前相同的问题。这是iOS9的一个错误。

让我知道它是怎么回事,如果这可以解决您的问题。

答案 1 :(得分:0)

这是在swift 3中处理此问题的扩展

extension UIViewController {

    func presentOk(with title: String, and message: String, handler: ((UIAlertAction) -> Void)?) {

        let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)

        alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: handler))

        OperationQueue.main.addOperation {
            self.view.endEditing(true)
            self.present(alert, animated: true, completion: nil)
        }
    }
}

关键是隐藏键盘并将控制器显示在主队列中。

用法

presentOk(with: "My app title", and: "this is the alert message", handler: nil)