以modal控制器为例:
正常情况下,如果键盘在界面显示时候,就dismiss当前控制器,那么控制器的view会先退出,键盘会比控制器的view延迟退出。
解决办法:
dismiss控制器的view之前,先退出键盘,再dismiss控制器的view
[self.view endEditing:YES];
[self dismissViewControllerAnimated:YES completion:nil];
以上两行代码虽然解决了问题,但是会发现控制器的view被dismiss的时候,离开界面的动画执行比之前更快-闪退。为了解决控制器的view快速闪退的问题。
更好的办法:
// 先退出键盘,延迟0.2秒后 再dismiss控制器
[self.view endEditing:YES];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self dismissViewControllerAnimated:YES completion:nil];
[self.view endEditing:YES];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self dismissViewControllerAnimated:YES completion:nil];
});
其他解决办法:
在以下方法中退出键盘:
- (void)viewWillDisappear:(BOOL)animated