昨天leader反馈过来一个很恶心的问题,App首次登陆,验证密码通过后,会提醒用户是否开启指纹解锁。当用户点击确定的时候,正确的做法是应该显示指纹解锁的页面,但是每次在这个时候,都会伴随着动画-自动弹出键盘并隐藏掉...然而这个界面并没有UITextField或者是UITextView。
反复测试,发现键盘貌似是上个界面,输入密码的时候传递过去的(因为推出下一个界面时键盘是什么样子大的,动画的时候的键盘就是什么样子的)。所以一开始我的思路是因为上个界面消失的时候没有取消第一响应。
但是事实证明并非如此。后来我想,可能是动作执行了,但是动画毕竟有时间 ,可能时间没走完,所以采用了dispatch_after,延迟2.5秒(系统键盘收起的时间)后再推出下一个界面。然而还是没有帮助。
问题的症结到底是什么呢?
事实上,之所以会自动弹出来键盘,是因为提醒用户开启指纹解锁的视图UIAlertView造成的。UIAlertView调用的时候,会暂时停止系统动画效果,结束后再重新寻找动画,这就出现了键盘出现再隐藏的效果。
解决的方法其实是也挺简单的。也是采用的延时思路。
//延时,确保动画执行完毕再显示alert
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//第一次登录,弹框提醒用户是否开启指纹密码。
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"是否启用指纹密码" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
[self.view addSubview:alert];
[alert show];
});