iOS之ViewController容器篇

iOS5之后碳却,蘋果完善了以viewController來作為容器處理視圖控制器切換的相關(guān)API洞辣,

具體的方法和屬性有如下幾個:


@property(nonatomic,readonly) NSArray *childViewControllers

- (void)addChildViewController:(UIViewController *)childController

- (void) removeFromParentViewController

- (void)transitionFromViewController...

- (void)willMoveToParentViewController:(UIViewController *)parent

- (void)didMoveToParentViewController:(UIViewController *)parent



willMoveToParentViewController方法:

  • 當我們向我們的視圖控制器容器中調(diào)用removeFromParentViewController方法時捡絮,必須要先調(diào)用該方法竭恬,且parent參數(shù)為nil:
   [將要刪除的視圖控制器 willMoveToParentViewController: nil];

   [將要刪除的視圖控制器 removeFromParentViewController: 父];
  • 當我們調(diào)用addChildViewController方法時瞧壮,在添加子視圖控制器之前將自動調(diào)用該方法庆揪。所以遏乔,就不需要我們顯示調(diào)用了义矛。


didMoveToParentViewController方法:

當從一個視圖控制容器中添加或者移除viewController后,該方法被調(diào)用盟萨。

  • 當我們向我們的視圖控制器容器中添加(或者刪除)子視圖控制器后凉翻,必須調(diào)用該方法,告訴iOS鸯旁,已經(jīng)完成添加(或刪除)子控制器的操作噪矛。
   [將要刪除的視圖控制器 addChildViewController: nil];

   [將要刪除的視圖控制器 didMoveToParentViewController: 父];
  • removeFromParentViewController方法會自動調(diào)用了該方法量蕊,所以,刪除子控制器后艇挨,不需要在顯示的調(diào)用該方法了残炮。


歸納總結(jié):

  1. addChildViewController:向父VC中添加子VC,添加之后自動調(diào)用willMoveToParentViewController: superVC

  2. removeFromParentViewController:將子VC從父VC中移除缩滨,移除之后自動調(diào)用

didMoveToParentViewController: nil

  1. willMoveToParentViewController:當向父VC添加子VC之后势就,該方法會自動調(diào)用。若要從父VC移除子VC脉漏,需要在移除之前調(diào)用該方法苞冯,傳入?yún)?shù)nil。

  2. didMoveToParentViewController:
    當向父VC添加子VC之后侧巨,該方法不會被自動調(diào)用舅锄,需要顯示調(diào)用告訴編譯器已經(jīng)完成添加(事實上不調(diào)用該方法也不會有問題,不太明白);
    從父VC移除子VC之后司忱,該方法會自動調(diào)用皇忿,傳入的參數(shù)為nil,所以不需要顯示調(diào)用。

    注意點:

    要想切換子視圖控制器a/b, a/b必須均已添加到父視圖控制器中坦仍,不然會報錯

  3. transitionFromViewController: toViewController...在調(diào)用這個方法之前先調(diào)用

[fromViewController willMoveToParentViewController: nil];

在completion后 ,調(diào)用[toViewController didMoveToParentViewController:self];



代碼實例

                              ?添加?

[self addChildViewController: _currentVC];
// [_currentVC willMoveToParentViewController: self];(自動調(diào)用  省略)
//[_currentVC didMoveToParentViewController: self]; (可省略)

                               ?移除?  

[_currentVC willMoveToParentViewController: nil];
[_currentVC removeFromParentViewController];
//[_currentVC didMoveToParentViewController: nil]; (自動調(diào)用 省略)

                                ?轉(zhuǎn)換?
轉(zhuǎn)換方式1:
[_currentVC willMoveToParentViewController: nil];
[self transitionFromViewController: _currentVC toViewController: _secondVC];
[_secondVC didMoveToParentViewController: self];

轉(zhuǎn)換方式2:
- (void)transitionFromOldViewController:(UIViewController *)oldViewController toNewViewController:(UIViewController *)newViewController{
    [self transitionFromViewController:oldViewController toViewController:newViewController duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:nil completion:^(BOOL finished) {
        if (finished) {
            [newViewController didMoveToParentViewController:self];
            _currentVC = newViewController;
        }else{
            _currentVC = oldViewController;
        }
    }];
}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鳍烁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子繁扎,更是在濱河造成了極大的恐慌幔荒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梳玫,死亡現(xiàn)場離奇詭異爹梁,居然都是意外死亡,警方通過查閱死者的電腦和手機汽纠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門卫键,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人虱朵,你說我怎么就攤上這事莉炉。” “怎么了碴犬?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵絮宁,是天一觀的道長。 經(jīng)常有香客問我服协,道長绍昂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮窘游,結(jié)果婚禮上唠椭,老公的妹妹穿的比我還像新娘。我一直安慰自己忍饰,他們只是感情好贪嫂,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著艾蓝,像睡著了一般力崇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赢织,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天亮靴,我揣著相機與錄音,去河邊找鬼于置。 笑死茧吊,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的八毯。 我是一名探鬼主播饱狂,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宪彩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起讲婚,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤尿孔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筹麸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體活合,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年物赶,在試婚紗的時候發(fā)現(xiàn)自己被綠了白指。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡酵紫,死狀恐怖告嘲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奖地,我是刑警寧澤橄唬,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站参歹,受9級特大地震影響仰楚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一僧界、第九天 我趴在偏房一處隱蔽的房頂上張望侨嘀。 院中可真熱鬧,春花似錦捂襟、人聲如沸咬腕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽郎汪。三九已至,卻和暖如春闯狱,著一層夾襖步出監(jiān)牢的瞬間煞赢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工哄孤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留照筑,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓瘦陈,卻偏偏與公主長得像凝危,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子晨逝,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容