解决UIAlertView导致键盘弹出的问题
如果在关闭键盘同时弹出UIAlertView,会导致当UIAlertView被dismiss时,出现键盘闪动一次(弹出又关闭)。
【解决UIAlertView导致键盘弹出的问题】做某需求时被这个问题困扰好几天,在stackoverflow上查询无果;各种google网络寻找前人经验,只有人说用dispatch_after做少量延时后再弹出alertView,像下面这样。但是经过测试效果不好,而且延时多少不好把握,容易出现UI不连贯。
解法一:
dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC));
dispatch_after(delay, dispatch_get_main_queue(), ^{
[alertView show];
});
解法二:
如果用UIAlertController代替UIAlertView,就不会有任何UI问题。但是UIAlertController必须要通过某个VC进行present操作,在别的模块需要弹框时,只能全局查询顶层VC,比较麻烦,没有UIAlertView用起来方便。
终极解法:
最后发现原因是键盘关闭动画被打断后,UIAlertView所在window被系统设置成editing状态。通过以下方式可完美解决,实现UIAlertViewDelegate的方法。
#pragma mark - UIAlertViewDelegate- (void)didPresentAlertView:(UIAlertView *)alertView {
// Fix bug: show keyboard then dismiss after we have dismissed some alertview
[alertView.window endEditing:YES];
}
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 唱歌教学(导致嗓音损坏的几个常见的错误唱歌方法!)
- Spark|Spark 数据倾斜及其解决方案
- 解决SyntaxError:|解决SyntaxError: invalid syntax
- Spectrum|Spectrum 区块偶尔停止同步问题排查与解决笔记
- 一劳永逸地解决词汇量不够的问题