iOS模態視圖小結

一開始,我覺得iOS模態視圖只不過和push&pop差不多,都是爲了實現跳轉而生的。而且它比push更方便的是它不需要UINavigationController,直接使用代碼:

    ModalViewController *mvc =  [[ModalViewController alloc] init];
    [self presentViewController:mvc animated:YES completion:nil];

就可以實現跳轉。然後返回的話使用代碼:

[self dismissViewControllerAnimated:YES completion:nil];

就可以實現返回上一個頁面。

 

後來,我瞭解到modal和show方式跳轉的區別除了是否存在導航欄,還體現在業務上。一般來說同一業務內跳轉應該使用show方式跳轉,而modal適用於從這一業務切換到另一業務的場景。

 

現在,通過閱讀到喵神的博客我發現原來dismiss方法還有我之前一直沒有注意到的內容:

通常之前,我A控制器 Modal B控制器,使用present方法,然後B控制器返回A控制器,我就在B控制器調用dismiss方法。

這在用法上是沒有什麼問題的,因爲Apple文檔dismiss方法的discussion中有指出如果在被modal出的控制器(這裏假設就是B控制器,以下簡稱爲B)執行dismiss方法,而且B正好是在視圖層級中顯示在最外層的話,那麼B就會自己將自己移除掉。

由此,很長一段時間我認爲dismiss方法就只是用來移除自身的。其實不然,dismiss方法它還可以移除自己modal出來的視圖控制器

舉個例子:(假設->代表modal)

A->B->C

如果在B中執行dismiss方法,則結果就是Bmodal出來的C被移除。B自身並不會被移除!

還有一個情況,如果在A中執行dismiss方法,那麼Amodal出來的B就會被移除,Bmodal出的C因爲B被移除了,C自己也就被移除了。不過移除動畫只有B被移除的動畫被顯示,C的移除動畫是沒有的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章