在UIKit中,每個控制器管理著App中的一個頁面,多頁面的管理方式包括以下幾種:
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),江漢企業(yè)網(wǎng)站建設(shè),江漢品牌網(wǎng)站建設(shè),網(wǎng)站定制,江漢網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,江漢網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。1)使用模態(tài)方式切換頁面
2)使用導(dǎo)航控制器管理多個頁面
3)使用標(biāo)簽控制器管理多個頁面
modal,即模態(tài)方式,目的控制器被覆蓋著源控制器,并接受用戶的交互
默認(rèn)的動作是:從屏幕的下方彈出
下面介紹modal切換方式實(shí)現(xiàn)的三種方式以及頁面之間數(shù)據(jù)的傳遞
代理切換
storyboard的自動型segue
storyboard的自動型segue
代碼實(shí)現(xiàn)控制器的modal切換
切換動作中涉及的兩個控制器
源控制器:執(zhí)行切換動作的控制器
目的控制器:被切換并顯示的控制器
源控制器使用以下方法切換目的控制器:
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
viewControllerToPresent參數(shù):目的控制器
flag參數(shù):動畫使能
completion參數(shù):切換動作完成時執(zhí)行的代碼
注意:該方法調(diào)用時,源控制器必須已經(jīng)顯示,不要在viewDidLoad方法中調(diào)用
源控制器和目的控制器使用以下方法完成頁面返回的功能:
- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
如果是目的控制器調(diào)用,會自動交給源控制器去執(zhí)行返回動作,即源控制器和目的控制器都可以執(zhí)行,且效果一樣。
代碼切換:示例1
切換到UIAlertViewController
UIAlertController * ac = [UIAlertController alertControllerWithTitle:@"版本更新?" message:@"檢測到新版本,是否到App Store更新?" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction * a1 = [UIAlertAction actionWithTitle:@"更新" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { [[UIApplication sharedApplication] openURL:updateURL]; }]; UIAlertAction * a2 = [UIAlertAction actionWithTitle:@"算了" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { }]; [ac addAction:a1]; [ac addAction:a2]; [self presentViewController:ac animated:YES completion:^{ NSLog(@"modal"); }];
UIAlertController是UIKit中的控制器,并必須使用modal方式顯示
UIAlertController內(nèi)部已經(jīng)實(shí)現(xiàn)了點(diǎn)擊按鈕執(zhí)行dismissViewController...方法
UIAlertController用于代替UIAlertView及UIActionSheet
代碼切換:示例2
切換到自定義的控制器
//源控制器:執(zhí)行器執(zhí)行切換動作 AMViewContoller * vc = [[UIViewController alloc] init]; [self presentViewController:vc animated:YES completion:^{ NSLog(@"modal"); }];
//目的控制器:執(zhí)行返回動作 [self dismissViewControllerAnimated:YES completion:^{ NSLog(@"返回"); }];
代碼切換:控制器間值的傳遞
正向傳遞:源控制器將數(shù)據(jù)傳遞到目的控制器
傳遞時機(jī):目的控制器被創(chuàng)建后,目的控制器顯示前
傳遞方法:
目的控制器添加屬性
切換前,為目的控制器的屬性賦值
//目的控制器 @interface AMViewControllerTwo:UIViewController @property (nonatomic, copy) NSString * str; @end @implementation AMViewControllerTwo - (void) viewDidLoad { [super viewDidLoad]; NSLog(@"源控制器:%@", self.str); } @end
//源控制器的切換動作 AMViewControllerTwo * vc = [[AMViewControllerTwo alloc] init]; vc.str = @"這是源控制器AMViewControllerOne給你的數(shù)據(jù)"; [self presentViewController:vc animated:YES completion:^{ NSLog(@"modal"); }];
逆向傳遞:目的控制器將數(shù)據(jù)傳遞到源控制器
傳遞時機(jī):目的控制器返回前
傳遞方法:
目的控制器添加代理屬性并提出代理協(xié)議
源控制器成為目的控制器的代理并實(shí)現(xiàn)代理方法
dismiss前,調(diào)用代理的代理方法并間數(shù)據(jù)作為方法的參數(shù)傳遞
//目的控制器 @class AMViewControllerTwo; @protocol AMViewControllerTwoDelegate : NSObject - (void) viewControllerTwo:(AMViewControllerTwo*) vc dismissWithStr:(NSString *) str; @end @interface AMViewControllerTwo @property (nonatomic, copy) NSString * str; @property (nonatomic, weak) iddelegate; @end
//目的控制器執(zhí)行dimiss動作 if ( self.delegate && [self.delegate respondsToSelector:@selector(viewControllerTwo:dismissWithStr:)] ) { [self.delegate viewControllerTwo:self dismissWithStr:@"這是目的控制器AMViewControllerOnew還你的數(shù)據(jù)"]; } [self dismissViewControllerAnimated:YES completion:^{ NSLog(@"返回"); }];
//源控制器遵循代理協(xié)議 @interface AMViewControllerOne : UIViewController@end
//源控制器實(shí)現(xiàn)代理方法 - (void) viewControllerTwo:(AMViewControllerTwo*) vc dismissWithStr:(NSString *) str { NSLog(@"目的控制器:%@", ); }
//源控制器的切換動作 AMViewControllerTwo * vc = [[AMViewControllerTwo alloc] init]; vc.str = @"這是源控制器AMViewControllerOne給你的數(shù)據(jù)"; vc.delegate = self; [self presentViewController:vc animated:YES completion:^{ NSLog(@"modal"); }];
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。