iOS 9 - UIAlertView 关闭后弹出键盘
iOS 9 - Keyboard pops up after UIAlertView dismissed
我有一个奇怪的视觉错误,它只影响 iOS 9 台设备:
我的应用程序的登录 UIViewController
会在您点击按钮时运行并获得 OAuth 令牌,就像您期望的那样。如果我的 API returns 的响应是一个特定的状态代码,我会弹出一个 UIAlertView
说他们需要重置密码(如果他们在服务器上被标记为这样的话)结尾)。按下按钮后用于登录的电子邮件和密码字段 resignFirstResponder
,标准内容。
仅在 iOS 9 上,如果您点击重置路径,在您点击该警报视图上的“确定”的那一刻,键盘弹回,可能持续 800 毫秒,然后再次关闭。就好像有什么东西在排队等待展示它,但警报的存在阻止了它,直到你点击确定——在警报上点击确定后它绝对是瞬间的。
调试起来似乎非常棘手。我已将符号断点添加到 becomeFirstResponder
并且在发生此过程的任何地方都不会调用它。
关于如何调试/修复此问题的任何其他想法?它不影响iOS 7和iOS 8,只影响iOS 9.
大约 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];
这应该可以解决您的问题。
如果 animated = YES,您可能会遇到与以前相同的问题。这是 iOS9 的错误。
让我知道进展如何,以及这是否解决了您的问题。
这是 swift3
中处理此问题的扩展
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)
我有一个奇怪的视觉错误,它只影响 iOS 9 台设备:
我的应用程序的登录 UIViewController
会在您点击按钮时运行并获得 OAuth 令牌,就像您期望的那样。如果我的 API returns 的响应是一个特定的状态代码,我会弹出一个 UIAlertView
说他们需要重置密码(如果他们在服务器上被标记为这样的话)结尾)。按下按钮后用于登录的电子邮件和密码字段 resignFirstResponder
,标准内容。
仅在 iOS 9 上,如果您点击重置路径,在您点击该警报视图上的“确定”的那一刻,键盘弹回,可能持续 800 毫秒,然后再次关闭。就好像有什么东西在排队等待展示它,但警报的存在阻止了它,直到你点击确定——在警报上点击确定后它绝对是瞬间的。
调试起来似乎非常棘手。我已将符号断点添加到 becomeFirstResponder
并且在发生此过程的任何地方都不会调用它。
关于如何调试/修复此问题的任何其他想法?它不影响iOS 7和iOS 8,只影响iOS 9.
大约 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];
这应该可以解决您的问题。
如果 animated = YES,您可能会遇到与以前相同的问题。这是 iOS9 的错误。
让我知道进展如何,以及这是否解决了您的问题。
这是 swift3
中处理此问题的扩展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)