概念
ios開發(fā)中,在當(dāng)前視圖上再?gòu)棾鲆粋€(gè)視圖(模態(tài)視圖)例如登陸視圖熙暴,分享視圖闺属,注冊(cè)等等。
說(shuō)明
實(shí)現(xiàn)一個(gè)簡(jiǎn)單的多視圖應(yīng)用周霉,視圖控制器都會(huì)有一個(gè)presentViewController方法掂器,用來(lái)顯示模態(tài)窗口,在一些特別的環(huán)境下我們尤其愿意使用這種窗口俱箱,例如臨時(shí)呈現(xiàn)一些內(nèi)容時(shí)(登錄視圖唉匾、分享列表視圖等),所以今天在這里做一下整理匠楚。
一、具體設(shè)置和使用
1厂财、彈出模態(tài)視圖窗口(presentViewController方法)
樣例代碼為:
GreenViewController *greenViewController = [[GreenViewControlleralloc] init];
方法1:
[self presentModalViewController:greenViewController animated:YES];
方法2:
[self presentViewController:greenViewController animated:YES completion:nil];
兩種方法都可以彈出模態(tài)視圖窗口芋簿,方法2使用了block封裝,如果在動(dòng)畫彈出模塊窗口后有其它的操作璃饱,可以使用些方法与斤,這種方法比較常見(jiàn)。
2荚恶、 彈出時(shí)的動(dòng)畫風(fēng)格(UIModalTransitionStyle屬性)
彈出模態(tài)窗口時(shí)撩穿,如果我們選擇了動(dòng)畫顯示,那么我們可以通過(guò)modalTransitionStyle屬性來(lái)設(shè)置切入動(dòng)畫的風(fēng)格谒撼。
** UIModalTransitionStyleCoverVertical** // 底部滑入食寡。
UIModalTransitionStyleFlipHorizontal // 水平翻轉(zhuǎn)。
UIModalTransitionStyleCrossDissolve // 交叉溶解廓潜。
UIModalTransitionStylePartialCurl // 翻頁(yè)抵皱。
動(dòng)畫風(fēng)格不受設(shè)備的限制,即不管是iPhone還是iPad都會(huì)根據(jù)我們指定的風(fēng)格顯示轉(zhuǎn)場(chǎng)效果辩蛋。
3呻畸、回收模塊視圖窗口(dismissModalViewControllerAnimated方法)
方法一:
[self dismissModalViewControllerAnimated:YES]
方法二:
[self dismissViewControllerAnimated:YES completion:nil];
4、presentingViewController
presentingViewController是UIViewController的屬性悼院,官方文檔上這么解釋
presentingViewController
The view controller that presented this view controller.
大致意思是:A push B ,B的presentingViewController就是A.
視圖控制容器(View Controller Container)
像UINavgationController
伤为、UITabBarController
、UISplitViewController
等都屬于view controller container這些類的共性是都有一個(gè)類型為數(shù)組的對(duì)象viewControllers
屬性据途,用于保存一組視圖控制器绞愚。view controller container
會(huì)有自己默認(rèn)外觀叙甸。
任何view controller container
對(duì)象都可以通過(guò)viewControllers
屬性來(lái)訪問(wèn)子對(duì)象(視圖),而子對(duì)象也可以通過(guò)navigationController, tabbarController, splitViewController, parentViewController
找到相應(yīng)的view controller container
爽醋。
當(dāng)應(yīng)用以模態(tài)形式(通過(guò)presentViewController: animated: completion:
推出的視圖)顯示一個(gè)視圖時(shí)蚁署,負(fù)責(zé)顯示的控制器將是view controller container
最頂部的視圖,而負(fù)責(zé)推出的視圖蚂四。如下圖:
A present B,但是B的presentingViewController卻是UITabBarController光戈。
若想讓B的presentingViewController變成A需要設(shè)置definesPresentationContext
設(shè)置成YES,默認(rèn)是NO,另外需要將顯示的視圖的modalPresentationStyle
屬性設(shè)置為UIModalPresentationCurrentContext
代碼如下:
navController.modalPresentationStyle = UIModalPresentationCurrentContext;
self.definesPresentationContext = YES;
- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion遂赠;
有這么依據(jù)描述:
The presenting view controller is responsible for dismissing the view controller it presented. If you call this method on the presented view controller itself, UIKit asks the presenting view controller to handle the dismissal.
大致意思是:A push B久妆,那么A就有責(zé)任dismiss B,如果在B中調(diào)用[self dismissViewControllerAnimated...]就會(huì)A中發(fā)送dismiss跷睦,最終會(huì)由有A進(jìn)行dismiss,相當(dāng)于在B中執(zhí)行[self.presentingViewController dismissViewControllerAnimated...]
注: self為彈出的模塊視圖控制器
更多內(nèi)容請(qǐng)參見(jiàn)原帖