UIKit框架(9)控制器的模态切换方式(一)

  

在UIKit中,每个控制器管理着应用中的一个页面,多页面的管理方式包括以下几种:

1)使用模态方式切换页面

2)使用导航控制器管理多个页面

3)使用标签控制器管理多个页面


模态,即模态方式,目的控制器被覆盖着源控制器,并接受用户的交互

,,,默认的动作是:从屏幕的下方弹出


下面介绍模态切换方式实现的三种方式以及页面之间数据的传递

,,,,代理切换

,,,,故事板的自动型segue

,,,,故事板的自动型segue


<李>

<强>代码实现控制器的模态切换

切换动作中涉及的两个控制器

,,,,,源控制器:执行切换动作的控制器

,,,,,目的控制器:被切换并显示的控制器


源控制器使用以下方法切换目的控制器:

安康;(void) presentViewController: (UIViewController  *) viewControllerToPresent 动画:(BOOL) flag 完成:(void (^)(空白))完成

,,,viewControllerToPresent参数:目的控制器

,,,旗参数:动画使能

,,,完成参数:切换动作完成时执行的代码

,,,,注意:该方法调用时,源控制器必须已经显示,不要在viewDidLoad方法中调用


源控制器和目的控制器使用以下方法完成页面返回的功能:,,

安康;(void) dismissViewControllerAnimated: (BOOL) flag 完成:(void (^)(空白))完成

,,,如果是目的控制器调用,会自动交给源控制器去执行返回动作,即源控制器和目的控制器都可以执行,且效果一样。


<李>

<强>代码切换:示例1

切换到UIAlertViewController

UIAlertController  *, ac =, (UIAlertController  alertControllerWithTitle: @”版本更新?”,信息:@“检测到新版本,是否到App 商店更新?”,preferredStyle: UIAlertControllerStyleAlert);      时间=UIAlertAction  *, a1  [UIAlertAction  actionWithTitle: @”更新”,风格:UIAlertActionStyleDefault 处理程序:^ (UIAlertAction  *, _Nonnull 动作),{   ,,,[[UIApplication  sharedApplication], openURL: updateURL);   });   UIAlertAction  *, a2 =, [UIAlertAction  actionWithTitle: @“算”了,风格:UIAlertActionStyleCancel 处理程序:^ (UIAlertAction  *, _Nonnull 动作),{   ,,,,   });   [ac  addAction: a1];   (ac  addAction: a2);      [self  presentViewController: ac 动画:YES 完成:^ {   ,,,NSLog(@“模态”);   }];

,,,, UIAlertController是UIKit中的控制器,并必须使用模态方式显示

,,,, UIAlertController内部已经实现了点击按钮执行dismissViewController……方法

,,,, UIAlertController用于代替UIAlertView及UIActionSheet


<李>

<强>代码切换:示例2

切换到自定义的控制器

//源控制器:执行器执行切换动作   AMViewContoller  *, vc =, [[UIViewController  alloc], init);   [self  presentViewController: vc 动画:YES 完成:^ {   ,,,NSLog(@“模态”);   }]; //目的控制器:执行返回动作   [self  dismissViewControllerAnimated: YES 完成:^ {   ,,,NSLog(@“返回”);   }];


<李>

<强>代码切换:控制器间值的传递

正向传递:源控制器将数据传递到目的控制器

,,,传递时机:目的控制器被创建后,目的控制器显示前

,,,传递方法:

,,,,,,目的控制器添加属性

,,,,,,切换前,为目的控制器的属性赋值

//目的控制器   @interface  AMViewControllerTwo: ui   @property (原子,,复制),NSString  *, str;   @end   @implementation  AMViewControllerTwo    安康;(空白)viewDidLoad   {   ,,,(super  viewDidLoad);   ,,,NSLog(@“源控制器:% @”,,self.str),,,,,   }   @end
UIKit框架(9)控制器的模态切换方式(一)