iOS小結(jié)(解決presentViewController延遲問(wèn)題)

在 iOS 中,當(dāng)使用

-(void)presentViewController:(UIViewController*)viewControllerToPresent animated:(BOOL)flag completion:(void (^__nullable)(void))completion

方法進(jìn)行界面跳轉(zhuǎn)的時(shí)候,有時(shí)候會(huì)出現(xiàn)延遲,這個(gè)延遲有時(shí)候會(huì)有好幾秒的時(shí)間才會(huì)執(zhí)行 completion,有時(shí)候干脆就一直不會(huì)跳轉(zhuǎn)。

例如:在tableview的點(diǎn)擊方法中執(zhí)行

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

[self presentViewController:alertViewController animated:YEScompletion:^{

}];

}

alertViewController 跳轉(zhuǎn)延遲很長(zhǎng)時(shí)間,有時(shí)候干脆就不跳轉(zhuǎn)了。但讓人頭疼的是點(diǎn)擊cell的時(shí)候,在alertViewController跳轉(zhuǎn)延遲過(guò)程中,滑動(dòng)一下tableview或者再次點(diǎn)擊一下cell,alertViewController會(huì)立即跳轉(zhuǎn)。

查找了很長(zhǎng)時(shí)間,總算得出一個(gè)原因:由于某種原因,presentViewController跳轉(zhuǎn)時(shí)completion的內(nèi)容并不會(huì)真的馬上觸發(fā)執(zhí)行,除非有一個(gè)主線程事件觸發(fā)這種消費(fèi)。比如在彈出慢的時(shí)候,你隨便點(diǎn)擊一下屏幕,馬上就能彈出來(lái) 。

所以得出相應(yīng)的解決方法:

1.在主線程中執(zhí)行跳轉(zhuǎn):

__weak typeof(self)weakSelf = self;

dispatch_async(dispatch_get_main_queue(), ^(void){

[weakSelf presentViewController:alertViewController animated:YES completion:nil];

});

2.在執(zhí)行跳轉(zhuǎn)前喚醒主線程。

/** WakeUpTheMainThread 方法什么都不執(zhí)行,它的作用只是喚醒主線程 */

[self performSelectorOnMainThread:@selector(WakeUpTheMainThread) withObject:nil waitUntilDone:NO];

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.自定義控件 a.繼承某個(gè)控件 b.重寫(xiě)initWithFrame方法可以設(shè)置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,704評(píng)論 2 4
  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,734評(píng)論 1 14
  • 1、設(shè)置UILabel行間距 NSMutableAttributedString* attrString = [[...
    十年一品溫如言1008閱讀 2,039評(píng)論 0 3
  • 上官網(wǎng)注冊(cè)賬號(hào) 首先來(lái)到環(huán)信的官網(wǎng),然后登陸.沒(méi)有賬號(hào)先注冊(cè)一個(gè). 進(jìn)去之后創(chuàng)建應(yīng)用,如圖 創(chuàng)建應(yīng)用界面 點(diǎn)擊確定...
    loneWolf01閱讀 563評(píng)論 0 0
  • 我搬到這個(gè)小區(qū)不久,便總結(jié)了一條規(guī)律,那就是,每到周一至周四晚上十點(diǎn)鐘,會(huì)有一雙高跟鞋敲擊樓梯的聲音傳來(lái),由下到上...
    荒野石頭閱讀 856評(píng)論 0 2

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