利用ModalViewController切换View

当程序中含有多个 view,需要在之间切换的时候,可以使用 UINavigationController,或者是 ModalViewController。UINabigationController 是通过向导条来切换多个 view。而如果 view 的数量比较少,且显示领域为全屏的时候,用 ModalViewController 就比较合适(比如需要用户输入信息的view,结束后自动回复到之前的view)。今天我们就看看 ModalViewController 的创建方法。

ModalViewController 并不像 UINavigationController 是一个专门的类,使用 UIViewController 的 presentModalViewController 方法指定之后就是 ModalViewController 了。

这里使用上两回做成的 CustomViewController(由UIViewController继承)来实现 ModalViewController 的实例。

首先,准备 ModalViewController 退出时的函数。调用 UIViewController 的 dismissModalViewController:Animated: 方法就可以了,如下所示:

 

// 这里按钮按下的时候退出 ModalViewController
-(void)dismiss:(id)inSender {
    //  如果是被 presentModalViewController 以外的实例调用,parentViewController 将是nil,下面的调用无效
    [self.parentViewController dismissModalViewControllerAnimated:YES];
}

接下来,生成另一个 CustomViewController 的实例,用来表示 ModalViewController,并将其对应的 view 设置成红色。然后传递给 presentModalViewController: Animated: 显示 ModalViewController 的 view。

 

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    controller = [[CustomViewController alloc] init];
    [window addSubview:controller.view];
    [window makeKeyAndVisible];
    // 生成 ModalViewController
    CustomViewControllercontrollerB = [[CustomViewController alloc] init];
    // 设置 view 的背景为红色
    controllerB.view.backgroundColor = [UIColor redColor];
    // 显示 ModalViewController view
    [controller presentModalViewController:controllerB animated:YES];
    // presentModalViewController 已经被 controller 管理,这里可以释放该实例了
    [controllerB release];
}

 

编译执行以后,首先启动的是红色背景的 ModalViewController view、按下按钮后恢复到蓝色背景的通常 view 上。

也可以在显示 ModalViewController view 之前设置 UIViewContrller 的 modalTransitionStyle 属性,使其以动画形式显示。

controllerB.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

 

CustomViewController

 

以上的实现只是单一地实现了 ModalViewController view 的功能,除了程序开始提醒用户一些信息外什么也做不了。另外由于是放入了 applicationDidFinishLaunching 中的原因,也不能反复的显示。另外,在 ModalViewController view 上设置的内容也不能反映到原来的 view 上。

posted @   郑文亮  阅读(342)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2011-03-09 jquery获取和设置radio,check,select选项(转)
点击右上角即可分享
微信分享提示