willMoveToParentViewController和didMoveToParentViewCon

在iOS 5.0以前,我們?cè)谝粋€(gè)UIViewController中這樣組織相關(guān)的UIView

在以前,一個(gè)UIViewController的View可能有很多小的子view。這些子view很多時(shí)候被蓋在最后,我們?cè)谧钔鈱覸iewController的viewDidLoad方法中,用addSubview增加了大量的子view愕宋。這些子view大多數(shù)不會(huì)一直處于界面上,只是在某些情況下才會(huì)出現(xiàn)结榄,例如登陸失敗的提示view中贝,上傳附件成功的提示view,網(wǎng)絡(luò)失敗的提示view等臼朗。但是雖然這些view很少出現(xiàn)邻寿,但是我們卻常常一直把它們放在內(nèi)存中。另外视哑,當(dāng)收到內(nèi)存警告時(shí)绣否,我們只能自己手工把這些view從super view中去掉。

在iOS 5.0及以后挡毅,iOS為UIViewController類(lèi)添加了新的屬性和方法:

@property(nonatomic,readonly) NSArray *childViewControllers

- (void)addChildViewController:(UIViewController *)childController

- (void) removeFromParentViewController

- (void)transitionFromViewController::::::

- (void)willMoveToParentViewController:(UIViewController *)parent

- (void)didMoveToParentViewController:(UIViewController *)parent

這樣蒜撮,就能夠?qū)⒁粋€(gè)頁(yè)面中的UIViewController控制起來(lái),而不是混亂的共用一個(gè)UIViewController

跪呈,最重要的是段磨,編程習(xí)慣的革命:降低了功能的耦合度!

寫(xiě)這篇博客耗绿,僅僅是講以上5個(gè)方法苹支!僅此而已。因?yàn)楫?dāng)我在百度或者谷歌中缭乘,輸入以上5個(gè)方法的名字后沐序,查出來(lái)的,并沒(méi)有告訴這5個(gè)方法起到如何的作用堕绩?如何使用?

所以邑时,我僅僅是想從API角度來(lái)談一談奴紧,這5個(gè)方法。

廢話不多說(shuō)了晶丘!

先搞清楚一個(gè)今天提到的概念:

[父視圖控制器addChildViewController:子視圖控制器];

在此黍氮,圖控制器A添加了另一個(gè)圖控制器B唐含,那么A充當(dāng)父視圖控制器,B充當(dāng)子視圖控制器沫浆。父視圖控制器充當(dāng)了視圖控制器容器的角色捷枯。

addChildViewController方法:

- (void)addChildViewController:(UIViewController *)childController

向視圖控制器容器中添加子視圖控制器

childController:子視圖控制器

當(dāng)要添加的子視圖控制器已經(jīng)包含在視圖控制器容器中,那么专执,相當(dāng)于先從父視圖控制器中刪除淮捆,然后重新添加到父視圖控制器中。

removeFromParentViewController 方法

- (void)removeFromParentViewController

從父視圖控制器中刪除本股。

transitionFromViewController 方法

- (void)transitionFromViewController:(UIViewController *)fromViewControllertoViewController:(UIViewController *)toViewControllerduration:(NSTimeInterval)durationoptions:(UIViewAnimationOptions)optionsanimations:(void (^)(void))animationscompletion:(void (^)(BOOL finished))completion

交換兩個(gè)子視圖控制器的位置(由于添加的順序不同攀痊,所以子試圖控制器在父視圖控制器中存在層次關(guān)系)

fromViewController:當(dāng)前顯示的子試圖控制器,將被替換為非顯示狀態(tài)

toViewController:將要顯示的子視圖控制器

duration:交換動(dòng)畫(huà)持續(xù)的時(shí)間拄显,單位秒

options:動(dòng)畫(huà)的方式

animations:動(dòng)畫(huà)Block

completion:完成后執(zhí)行的Block

willMoveToParentViewController 方法

- (void)willMoveToParentViewController:(UIViewController *)parent

當(dāng)一個(gè)視圖控制器從視圖控制器容器中被添加或者被刪除之前苟径,該方法被調(diào)用

parent:父視圖控制器,如果沒(méi)有父視圖控制器躬审,將為nil

注意點(diǎn):

1.當(dāng)我們向我們的視圖控制器容器中調(diào)用removeFromParentViewController方法時(shí)棘街,必須要先調(diào)用該方法,且parent參數(shù)為nil:

[將要?jiǎng)h除的視圖控制器willMoveToParentViewController:nil];

2.當(dāng)我們調(diào)用addChildViewController方法時(shí)承边,在添加子視圖控制器之前將自動(dòng)調(diào)用該方法遭殉。所以,就不需要我們顯示調(diào)用了炒刁。

didMoveToParentViewController 方法

- (void)didMoveToParentViewController:(UIViewController *)parent

當(dāng)從一個(gè)視圖控制容器中添加或者移除viewController后恩沽,該方法被調(diào)用。

parent:父視圖控制器翔始,如果沒(méi)有父視圖控制器罗心,將為nil

當(dāng)我們向我們的視圖控制器容器(就是父視圖控制器,它調(diào)用addChildViewController方法加入子視圖控制器城瞎,它就成為了視圖控制器的容器)中添加(或者刪除)子視圖控制器后渤闷,必須調(diào)用該方法,告訴iOS脖镀,已經(jīng)完成添加(或刪除)子控制器的操作飒箭。

removeFromParentViewController方法會(huì)自動(dòng)調(diào)用了該方法,所以蜒灰,刪除子控制器后弦蹂,不需要在顯示的調(diào)用該方法了。

其實(shí)强窖,這幾個(gè)方法中的API說(shuō)明凸椿,看的還懂。

最后翅溺,

關(guān)于willMoveToParentViewController方法和didMoveToParentViewController方法的使用

1.這兩個(gè)方法用在子試圖控制器交換的時(shí)候調(diào)用脑漫!即調(diào)用transitionFromViewController 方法時(shí)髓抑,調(diào)用。

2.當(dāng)調(diào)用willMoveToParentViewController方法或didMoveToParentViewController方法時(shí)优幸,要注意他們的參數(shù)使用:

當(dāng)某個(gè)子視圖控制器將從父視圖控制器中刪除時(shí)吨拍,parent參數(shù)為nil。

即:[將被刪除的子試圖控制器willMoveToParentViewController:nil];

當(dāng)某個(gè)子試圖控制器將加入到父視圖控制器時(shí)网杆,parent參數(shù)為父視圖控制器羹饰。

即:[將被加入的子視圖控制器didMoveToParentViewController:父視圖控制器];

3.無(wú)需調(diào)用[子視圖控制器willMoveToParentViewController:父視圖控制器]方法。因?yàn)槲覀冋{(diào)用[父視圖控制器addChildViewController:子視圖控制器]時(shí)跛璧,已經(jīng)默認(rèn)調(diào)用了严里。

只需要在transitionFromViewController方法后,調(diào)用[子視圖控制器didMoveToParentViewController:父視圖控制器];

4.無(wú)需調(diào)用[子視圖控制器didMoveToParentViewController:父視圖控制器]方法追城。因?yàn)槲覀冋{(diào)用

[子視圖控制器removeFromParentViewController]時(shí)刹碾,已經(jīng)默認(rèn)調(diào)用了。

只需要在transitionFromViewController方法之前調(diào)用:[子視圖控制器willMoveToParentViewController:nil]座柱。

希望對(duì)你有所幫助迷帜!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市色洞,隨后出現(xiàn)的幾起案子戏锹,更是在濱河造成了極大的恐慌,老刑警劉巖火诸,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锦针,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡置蜀,警方通過(guò)查閱死者的電腦和手機(jī)奈搜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盯荤,“玉大人馋吗,你說(shuō)我怎么就攤上這事∏锍樱” “怎么了宏粤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)灼卢。 經(jīng)常有香客問(wèn)我绍哎,道長(zhǎng),這世上最難降的妖魔是什么鞋真? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任蛇摸,我火速辦了婚禮,結(jié)果婚禮上灿巧,老公的妹妹穿的比我還像新娘赶袄。我一直安慰自己,他們只是感情好抠藕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布饿肺。 她就那樣靜靜地躺著,像睡著了一般盾似。 火紅的嫁衣襯著肌膚如雪敬辣。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天零院,我揣著相機(jī)與錄音溉跃,去河邊找鬼。 笑死告抄,一個(gè)胖子當(dāng)著我的面吹牛撰茎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播打洼,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼龄糊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了募疮?” 一聲冷哼從身側(cè)響起炫惩,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎阿浓,沒(méi)想到半個(gè)月后他嚷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芭毙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年筋蓖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稿蹲。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扭勉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苛聘,到底是詐尸還是另有隱情涂炎,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布设哗,位于F島的核電站唱捣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏网梢。R本人自食惡果不足惜震缭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望战虏。 院中可真熱鬧拣宰,春花似錦党涕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至晌该,卻和暖如春肥荔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背朝群。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工燕耿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姜胖。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓誉帅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親谭期。 傳聞我的和親對(duì)象是個(gè)殘疾皇子堵第,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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