解決UIAlertView導(dǎo)致鍵盤彈出的問題

如果在關(guān)閉鍵盤同時(shí)彈出UIAlertView,會(huì)導(dǎo)致當(dāng)UIAlertView被dismiss時(shí),出現(xiàn)鍵盤閃動(dòng)一次(彈出又關(guān)閉)。

做某需求時(shí)被這個(gè)問題困擾好幾天,在stackoverflow上查詢無果;各種google網(wǎng)絡(luò)尋找前人經(jīng)驗(yàn),只有人說用dispatch_after做少量延時(shí)后再彈出alertView,像下面這樣。但是經(jīng)過測(cè)試效果不好,而且延時(shí)多少不好把握,容易出現(xiàn)UI不連貫。

解法一:

dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC));
dispatch_after(delay, dispatch_get_main_queue(), ^{
      [alertView show];
 });

解法二:

如果用UIAlertController代替UIAlertView,就不會(huì)有任何UI問題。但是UIAlertController必須要通過某個(gè)VC進(jìn)行present操作,在別的模塊需要彈框時(shí),只能全局查詢頂層VC,比較麻煩,沒有UIAlertView用起來方便。

終極解法:

最后發(fā)現(xiàn)原因是鍵盤關(guān)閉動(dòng)畫被打斷后,UIAlertView所在window被系統(tǒng)設(shè)置成editing狀態(tài)。通過以下方式可完美解決,實(shí)現(xiàn)UIAlertViewDelegate的方法。

#pragma mark - UIAlertViewDelegate

- (void)didPresentAlertView:(UIAlertView *)alertView {
    // Fix bug: show keyboard then dismiss after we have dismissed some alertview
    [alertView.window endEditing:YES];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容