在iOS 5.0及以后班挖,iOS為UIViewController類添加了新的屬性和方法:
@property(nonatomic,readonly)?NSArray?*childViewControllers
-?(void)addChildViewController:(UIViewController?*)childController
-?(void)removeFromParentViewController
-?(void)transitionFromViewController::::::
-?(void)willMoveToParentViewController:(UIViewController?*)parent
-?(void)didMoveToParentViewController:(UIViewController?*)parent
這里看看這幾個(gè)方法的使用:
一虏肾、[父視圖控制器?addChildViewController:子視圖控制器];
在此识脆,圖控制器A添加了另一個(gè)圖控制器B倔既,那么A充當(dāng)父視圖控制器,B充當(dāng)子視圖控制器切心。父視圖控制器充當(dāng)了視圖控制器容器的角色飒筑。
1、addChildViewController方法:
1-?(void)addChildViewController:(UIViewController?*)childController
向視圖控制器容器中添加子視圖控制器
childController:子視圖控制器
當(dāng)要添加的子視圖控制器已經(jīng)包含在視圖控制器容器中绽昏,那么协屡,相當(dāng)于先從父視圖控制器中刪除,然后重新添加到父視圖控制器中全谤。
2肤晓、removeFromParentViewController 方法
1-?(void)removeFromParentViewController
從父視圖控制器中刪除。
3认然、transitionFromViewController 方法
1-?(void)transitionFromViewController:(UIViewController?*)fromViewController?toViewController:(UIViewController?*)toViewController?duration:(NSTimeInterval)duration?options:(UIViewAnimationOptions)options?animations:(void(^)(void))animations?completion:(void(^)(BOOLfinished))completion
交換兩個(gè)子視圖控制器的位置(由于添加的順序不同补憾,所以子試圖控制器在父視圖控制器中存在層次關(guān)系)
fromViewController:當(dāng)前顯示的子試圖控制器,將被替換為非顯示狀態(tài)
toViewController:將要顯示的子視圖控制器
duration:交換動(dòng)畫持續(xù)的時(shí)間卷员,單位秒
options:動(dòng)畫的方式
animations:動(dòng)畫Block
completion:完成后執(zhí)行的Block
4盈匾、willMoveToParentViewController 方法
1-?(void)willMoveToParentViewController:(UIViewController?*)parent
當(dāng)一個(gè)視圖控制器從視圖控制器容器中被添加或者被刪除之前,該方法被調(diào)用parent:父視圖控制器毕骡,如果沒有父視圖控制器威酒,將為nil
注意點(diǎn):
當(dāng)我們向我們的視圖控制器容器中調(diào)用removeFromParentViewController方法時(shí),必須要先調(diào)用該方法挺峡,且parent參數(shù)為nil:
[將要?jiǎng)h除的視圖控制器?willMoveToParentViewController:nil];
當(dāng)我們調(diào)用addChildViewController方法時(shí)葵孤,在添加子視圖控制器之前將自動(dòng)調(diào)用該方法。所以橱赠,就不需要我們顯示調(diào)用了尤仍。
5、didMoveToParentViewController 方法
1-?(void)didMoveToParentViewController:(UIViewController?*)parent
當(dāng)從一個(gè)視圖控制容器中添加或者移除viewController后狭姨,該方法被調(diào)用宰啦。
parent:父視圖控制器,如果沒有父視圖控制器饼拍,將為nil
當(dāng)我們向我們的視圖控制器容器(就是父視圖控制器赡模,它調(diào)用addChildViewController方法加入子視圖控制器,它就成為了視圖控制器的容器)中添加(或者刪除)子視圖控制器后师抄,必須調(diào)用該方法漓柑,告訴iOS,已經(jīng)完成添加(或刪除)子控制器的操作。
removeFromParentViewController?方法會(huì)自動(dòng)調(diào)用了該方法辆布,所以瞬矩,刪除子控制器后,不需要在顯示的調(diào)用該方法了锋玲。
其實(shí)景用,這幾個(gè)方法中的API說明,看的還懂惭蹂。
二伞插、關(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.無需調(diào)用[子視圖控制器?willMoveToParentViewController:父視圖控制器]方法幽歼。因?yàn)槲覀冋{(diào)用[父視圖控制器?addChildViewController:子視圖控制器]時(shí),已經(jīng)默認(rèn)調(diào)用了谬盐。
只需要在transitionFromViewController方法后甸私,調(diào)用[子視圖控制器didMoveToParentViewController:父視圖控制器];
4.無需調(diào)用[子視圖控制器?didMoveToParentViewController:父視圖控制器]方法。因?yàn)槲覀冋{(diào)用
[子視圖控制器?removeFromParentViewController]時(shí)飞傀,已經(jīng)默認(rèn)調(diào)用了皇型。
只需要在transitionFromViewController方法之前調(diào)用:[子視圖控制器?willMoveToParentViewController:nil]。
經(jīng)過這幾點(diǎn)說明砸烦,在一些視圖切換的過程中弃鸦,和視圖的換位中,應(yīng)該可以了解什么時(shí)候去調(diào)用對(duì)應(yīng)的視圖啦幢痘。