bug日志(1):UIAlertView消失之后收起的键盘又弹出

iOS8之后,有了UIAlertController这个类,如下

NS_CLASS_AVAILABLE_IOS(8_0) @interface UIAlertController : UIViewController

很明显,苹果强烈建议广大码农们如果能不用UIAlertView就不要用啦,因为我们有UIAlertController了!

进入正题......

为了兼容iOS7,我们的项目中就统一使用了UIAlertView。问题来了:(项目中的某一)界面中textField处于编辑状态(界面上有键盘),点击界面中一个执行确定操作的按钮时,我先将键盘收起,键盘收起的执行代码是这样的

[self.view endEditing:YES];

随即又执行了弹出一个UIAlertView的代码,点击UIAlertView上的确定按钮之后其被dismiss掉了。这时,键盘又神奇般的弹了出来!!!

看了一下真机系统版本号:9.2.1。随后又用另外一个真机(系统版本8.1.2)进行测试时,这个问题却没有出现。

于是百度了一下,经验证,以下代码可以解决我遇到的这个问题

if (IOS_SystemVersion >= 8.0)  {
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"title" message:@"message" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {

        }];
        [alertController addAction:okAction];
        [self presentViewController:alertController animated:YES completion:nil];
    }
    else  {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"title" message:@"message" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
        [alert show];
    }

有位大侠是这样说的: 在iOS 8.3以后,dismiss alert view时系统会尝试恢复之前的keyboard input。可有一点我不明白的是,我明明执行了收起键盘的代码啊!!! 苹果,你告诉我,这算不算是一个系统级的bug......

接昨天的写。在百度的时候,还有一位朋友问了这么一个问题:A界面有个textview,在编辑状态(有键盘)的时候我点击按钮,按钮的处理有结束所有控件编辑(关闭键盘)的操作,然后再弹出alertview,点击alerview对话框后pop到B界面,现在发现pop到B界面后界面会出现弹出键盘再消失的情况,如果我去掉弹出alertview这个操作,点击按钮后直接pop则不会出现这个问题.

这个,本人亲自试验了一下,发现这个现象也是高版本系统在处理UIAlertView时所表现出来的现象。

有大侠说用NSTimer,0.25秒(键盘收起的动画时间)后,再去pop,像下面这样

self.myTimer = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(popToPreviousViewController) userInfo:nil repeats:NO];

也有建议这样

[self performSelector:@selector(popVC) withObject:nil afterDelay:0.25];

都能解决问题。

但我的建议是这样的

if (IOS_SystemVersion >= 8.0)  {
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"alert" message:@"l am alert" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *action = [UIAlertAction actionWithTitle:@"l know" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            [self.navigationController popViewControllerAnimated:YES];
        }];
        [alertController addAction:action];
        [self presentViewController:alertController animated:YES completion:nil];
    }
    else {
        [self.navigationController popViewControllerAnimated:YES];
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"alertView" message:@"l am alertView" delegate:nil cancelButtonTitle:@"pop" otherButtonTitles:nil];
        [alertView show];
    }

好了,就写到这里吧!

从这一篇开始,我将整个iOS开发bug报告系列,欢迎大家关注!

本文参考:http://www.cnblogs.com/android-wuwei/p/4685960.html

http://blog.csdn.net/ul123dr/article/details/50385929

http://www.cocoachina.com/bbs/read.php?tid=307336&page=e&#a

bug日志(1):UIAlertView消失之后收起的键盘又弹出

时间: 2024-10-12 22:38:33

bug日志(1):UIAlertView消失之后收起的键盘又弹出的相关文章

bug报告:UIAlertView消失之后收起的键盘又弹出

iOS8之后,有了UIAlertController这个类,如下 NS_CLASS_AVAILABLE_IOS(8_0) @interface UIAlertController : UIViewController 很明显,苹果强烈建议广大码农们如果能不用UIAlertView就不要用啦,因为我们有UIAlertController了! 进入正题... 为了兼容iOS7,我们的项目中就统一使用了UIAlertView.问题来了:(项目中的某一)界面中textField处于编辑状态(界面上有键盘

Android 另类方法监听软键盘的弹出收起事件

http://www.cnblogs.com/csonezp/p/5065624.html 最近做的项目碰到个问题,a界面是fragment+recyclerview,b界面带个edittext,并且会自动获得焦点弹出软键盘.由a界面进入b界面,再结束b界面返回a界面,就会在a界面上留下一片和软键盘大小相同的灰色区域,具体原因搞了很久也不清楚.但是问题总是要解决的,我在a的fragment上折腾了半天,始终没什么用.然后就想着在b界面折腾折腾,关闭activity的时候先收起挼键盘,软键盘收起完

Xcode6模拟器时BUG导致键盘无法弹出

Xcode 6.X版本可能会出现虚拟键盘无法调出,并在控制台出现如下提示:Can't find keyplane that supports type 5 for keyboard iPhone-PortraitChoco-PhonePad; using 2470951658_PortraitChoco_iPhone-Complex-Pad_Default 应该为 Xcode 6.X BUG所致,解决方法:在菜单栏通过Hardware->Keyboard->Toggle Software Ke

Android通过监听最外层布局的改变监听键盘的状态,软键盘的弹出和收起都会改变外层布局(前提是把Activity的mode设置成压缩);

最外层布局.addOnLayoutChangeListener(new OnLayoutChangeListener() { @Override public void onLayoutChange(View arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8) { // TODO Auto-generated method stub if(EditText.hasFocus()

关于UIAlertView弹出警告框自动消失

很多事时候弹出框只是为了提示用户,为了避免让用户过多不必要的操作,让弹出框自动消失就可以了 + (void)showDismissedAlertDialog:(NSString*)message { UIAlertView* alert = [[UIAlertView alloc] initWithTitle:nil   //NSLocalizedString(@"错误", nil) message:NSLocalizedString(message, nil) delegate:se

崩溃bug日志总结3

目录介绍 1.1 OnErrorNotImplementedException[ Can't create handler inside thread that has not called Looper.prepare()] 1.2 adb.exe,start-server' failed -- run manually if necessary 1.3 java.lang.IllegalStateException: ExpectedBEGIN_OBJECT but was STRING a

iOS开发- 自动消失的弹出框

- (void)timerFireMethod:(NSTimer*)theTimer//弹出框 { UIAlertView *promptAlert = (UIAlertView*)[theTimer userInfo]; [promptAlert dismissWithClickedButtonIndex:0 animated:NO]; promptAlert =NULL; } - (void)showAlert:(NSString *) _message{//时间 UIAlertView *

防止多个UIAlertView重叠弹出

http://www.jianshu.com/p/7ac398ef4532 项目中可能会遇到这种情况,好几个alertView因为逻辑关系全部弹出,用户需要一个个的点击才能将所有的alertView取消掉.或者说这种情况下,我们只需要弹出一个alertView就OK了. alertView是怎么弹出的?网上查找资料说是,每次执行[alertView show],这个方法的时候是新建了一个window,将alertView显示在了window上面.代码验证的确是这样的. 代码验证alertView

JavaScript动态实现div窗口弹出&消失功能

先积累一个JavaScript动态实现div窗口弹出&消失功能 首先是index.jsp代码 <html> <head> <link rel="stylesheet" href="css/DivStyle.css" media="screen"> <script type="text/javascript" src="scripts/div.js">&