iOS UIAlertView消失后键盘重新弹出问题-最终结局方
2019-01-19 本文已影响0人
iOS非常猿
1.问题:pop 一个viewController时候键盘会发生闪现
假如有两个ViewController A 和 B(使用了UINavigationController), 在B中的TextField操作结束后,使用UIAlertView提醒再返回到A界面,键盘会闪现出来,即使写了[_textField resignFirstResponder] 和 [self.view endEditing:YES]; 也还是会发生。
验证方法:在A和B控制器中都去调用textField的代理,这个时候,可以看到A和B中的代理都调用了。
解决方法:
方法一:这个问题就是因为键盘收起是有动画的。而在键盘收起的动画开始的时候就pop了,键盘的动画没有执行完当然要在下一个vc里继续执行。所以要等键盘完全收起之后再pop或者push。直接dispatch_after个0.5秒左右再执行pop或者push。至于为什么用0.5秒,可能因为系统键盘收起的duration在0.5内会执行完毕.
如果键盘是显示出来的,就延时0.5showAlert,如果键盘没显示,就直接showAlert
if ([IQKeyboardManager sharedManager].keyboardShowing){//如果键盘是显示的,就要给0.5秒的动画时间键盘收起,否则回去一个页面会闪现键盘
[weakSelf.viewendEditing:YES];
//OC延时执行
dispatch_time_tdelayTime =dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5/*延迟执行时间*/* NSEC_PER_SEC));
dispatch_after(delayTime, dispatch_get_main_queue(), ^{
jxt_showAlertTwoButton(@"返回上一页,将丢失现在编辑的内容",nil,@"返回", ^(NSIntegerbuttonIndex) {
[weakSelf.navigationControllerpopViewControllerAnimated:YES];
return;
},@"继续编辑", ^(NSIntegerbuttonIndex) {
});
});
}
else{
jxt_showAlertTwoButton(@"返回上一页,将丢失现在编辑的内容",nil,@"返回", ^(NSIntegerbuttonIndex) {
[weakSelf.navigationControllerpopViewControllerAnimated:YES];
return;
},@"继续编辑", ^(NSIntegerbuttonIndex) {
});
}