在UIKit中,每個控制器管理著App中的一個頁面,多頁面的管理方式包括以下幾種:

1)使用模態(tài)方式切換頁面
2)使用導(dǎo)航控制器管理多個頁面
3)使用標(biāo)簽控制器管理多個頁面
modal,即模態(tài)方式,目的控制器被覆蓋著源控制器,并接受用戶的交互
默認(rèn)的動作是:從屏幕的下方彈出
下面介紹modal切換方式實現(xiàn)的三種方式以及頁面之間數(shù)據(jù)的傳遞
代理切換
storyboard的自動型segue
storyboard的自動型segue
代碼實現(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)實現(xià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é)議
源控制器成為目的控制器的代理并實現(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) id<AMViewControllerTwoDelegate> delegate; @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 <AMViewControllerTwoDelegate> @end
//源控制器實現(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ù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
文章名稱:UIKit框架(9)控制器的modal切換方式(一)-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://chinadenli.net/article10/cejsgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、網(wǎng)站排名、品牌網(wǎng)站建設(shè)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容