IOS开发(十):场景(2)模态切换示例

上一篇没有手动编写代码,只是简单的一个示例。在这一篇,将使用手工控制模态切换。

启动切换:

使用UIViewController的实例方法:

[self performSegueWithIdentifier:@"toMySence" sender:self];


执行这行代码将会启动切换,并发生过渡。参数sender应设置为启动切换的对象(不管它是什么对象),这样在切换期间就知道是哪个对象启动了切换。

关闭模态场景:

在上一篇有个问题,那就是无法返回到上一个场景。使用UIViewController的方法dismissViewControllerAnimated:completion实现,可以在显示模态场景的视图控制器中调用这个方法,也可以在模态场景的视图控制器中调用它:

[self dismissViewControllerAnimated:YES completion:nil];

参数completion是一个可选参数,用于指定过渡完毕后将执行的代码块。

另外,在目标视图控制器中,可以使用self.presentingViewController获取源视图控制器;同样在源视图控制器中,可以使用self.presentedViewController获取目标视图控制器。

例如:

//在目标视图控制器访问源视图控制器的属性
((ViewController *)self.presentingViewController).<property>
//在源视图控制器访问目标视图控制器的属性
((ViewController *)self.presentedViewController).<property>

其中的括号和类名是必不可少的,目的是将属性强制转换为正确的对象类型。

一、创建模拟切换的项目

创建一个项目,点击左下角的"+"号,添加一个名为EditorViewController的类,用于编辑内容的视图。加入到项目,最后点击Create完成添加。

在IB的空白处添加一个新的View Controller,同样和上一篇一样,改成Editor Scene,并且将默认创建的场景改成Inital Scene。

    

二、分别给两个视图添加控件

在第一个场景中添加一个emailLabel文本框,一个按钮;
在第二个场景中添加一个emailField输入框,一个按钮。

    

三、创建模态切换

在IB中,选中初始场景的修改按钮,按住Control键,点击鼠标连接到第二个场景,选择Modal,这时候会在两个场景中会出现一条连线。

选择Modal segue from...行,打开右边,可以给该切换添加一个标识符:toEditor,虽然这不是必需的。然后选择过渡样式:Partial Curl,类似翻页效果。

    

四、创建并连接输出口和操作

第一个场景中的UI须要连接到ViewController.h,第二个场景中的UI须要连接到EditorViewController.h。

五、实现应用程序逻辑

本示例的功能简述:
当显示第二个场景EditorViewController时,从源视图控制器的属性emailLabel获取内容,并显示在第二个视图控制器的文本框emailField中;
当用户单击第二个场景的按钮时,采取相反的措施,使用emailField的内容来更新emailLabel的内容。

注:
必须确保EditorViewController类知道ViewController类的属性,需要在EditorViewController.h中导入ViewController.h文件。

EditorViewController的viewDidLoad()方法中,实现获取第一个场景的属性;在按钮添加的动作dismissEditor方法中,执行相反的操作,更新第一个场景的属性,并且调用dismissViewControllerAnimatrd:completion方法关闭模态视图,返回到初始场景。

- (void)viewDidLoad
{
    self.emailField.text = ((ViewController *)self.presentingViewController).emailLabel.text;
    [super viewDidLoad];
	// Do any additional setup after loading the view.
}
//实现按钮方法
- (IBAction)dismissEditor:(id)sender {
    ((ViewController *)self.presentingViewController).emailLabel.text = self.emailField.text;
    [self dismissViewControllerAnimated:YES completion:nil];
}

编译运行,如图所示:

    

原文地址:https://www.cnblogs.com/xsjayz/p/3012639.html