iOS UIAlertView消失后键盘重新弹出问题-最终结局方案

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) {

            });
        }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.问题:pop 一个viewController时候键盘会发生闪现 假如有两个ViewController A ...
    晓飞90阅读 1,643评论 0 2
  • 优势 先来说说Leannote的优势: 类Evernote的界面 全平台客户端,包括网页端,扫除一切记录障碍 友好...
    xoit阅读 7,036评论 2 53
  • 通常一个APP分为网络、数据、业务等多个层级。只看数据层、最基本的模式如下。 VC从DB层读取数据、交由View进...
    kirito_song阅读 2,701评论 8 38
  • 你们曾说过,最向往不过是冰岛。我与你们之间像是丹麦海峡与格陵兰岛相望,想触及对方的美丽,却又那么遥不可及。我把我毕...
    秦阿琛阅读 309评论 0 3
  • 2016的你,你好呀。 “我已不会再对谁满怀期待,我知道这个世界每天都有太多遗憾,所以你好,再见。...
    景又函阅读 169评论 0 0