1.問題:pop 一個viewController時候鍵盤會發(fā)生閃現(xiàn)
假如有兩個ViewController A 和 B(使用了UINavigationController), 在B中的TextField操作結(jié)束后,使用UIAlertView提醒再返回到A界面,鍵盤會閃現(xiàn)出來,即使寫了[_textField resignFirstResponder] 和 [self.view endEditing:YES]; 也還是會發(fā)生。
驗證方法:在A和B控制器中都去調(diào)用textField的代理,這個時候,可以看到A和B中的代理都調(diào)用了。
解決方法:
方法一:這個問題就是因為鍵盤收起是有動畫的。而在鍵盤收起的動畫開始的時候就pop了,鍵盤的動畫沒有執(zhí)行完當(dāng)然要在下一個vc里繼續(xù)執(zhí)行。所以要等鍵盤完全收起之后再pop或者push。直接dispatch_after個0.5秒左右再執(zhí)行pop或者push。至于為什么用0.5秒,可能因為系統(tǒng)鍵盤收起的duration在0.5內(nèi)會執(zhí)行完畢.
如果鍵盤是顯示出來的,就延時0.5showAlert,如果鍵盤沒顯示,就直接showAlert
if ([IQKeyboardManager sharedManager].keyboardShowing){//如果鍵盤是顯示的,就要給0.5秒的動畫時間鍵盤收起,否則回去一個頁面會閃現(xiàn)鍵盤
[weakSelf.viewendEditing:YES];
//OC延時執(zhí)行
dispatch_time_tdelayTime =dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5/*延遲執(zhí)行時間*/* NSEC_PER_SEC));
dispatch_after(delayTime, dispatch_get_main_queue(), ^{
jxt_showAlertTwoButton(@"返回上一頁,將丟失現(xiàn)在編輯的內(nèi)容",nil,@"返回", ^(NSIntegerbuttonIndex) {
[weakSelf.navigationControllerpopViewControllerAnimated:YES];
return;
},@"繼續(xù)編輯", ^(NSIntegerbuttonIndex) {
});
});
}
else{
jxt_showAlertTwoButton(@"返回上一頁,將丟失現(xiàn)在編輯的內(nèi)容",nil,@"返回", ^(NSIntegerbuttonIndex) {
[weakSelf.navigationControllerpopViewControllerAnimated:YES];
return;
},@"繼續(xù)編輯", ^(NSIntegerbuttonIndex) {
});
}