A.概念
1.也可以用来切换控制器
2.如ActionSheet
 
除了push之外,还有另外一种控制器的切换方式,那就是Modal
任何控制器都能通过Modal的形式展示出来
Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止

以Modal的形式展示控制器
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion

关闭当初Modal出来的控制器
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;
 
 
B.使用
1.使用代码
展示modal控制器: presentViewController
隐去modal界面:dismissViewController
 
源控制器和modal控制器的关系
  • rootViewController一直都是源控制器
  • 系统会自己替换view
  • 源控制器中有一个属性指向modal控制器:presentedViewController(所以modal控制器才不会被销毁)
 
使用NavigationController包装一下modal控制器,添加上一个导航条
 
AppDelegate:
 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
2 // Override point for customization after application launch.
3
4 // 设置window
5 self.window = [[UIWindow alloc] init];
6 self.window.backgroundColor = [UIColor grayColor];
7 self.window.frame = [[UIScreen mainScreen] bounds];
8 [self.window makeKeyAndVisible];
9
10 // 创建一个UIView
11 UIViewController *viewController = [[UIViewController alloc] init];
12 viewController.view.backgroundColor = [UIColor redColor];
13 UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 200, 50)];
14 [button setTitle:@"弹出modal" forState:UIControlStateNormal];
15 [button addTarget:self action:@selector(popToModal) forControlEvents:UIControlEventTouchUpInside];
16
17 [viewController.view addSubview:button];
18 self.window.rootViewController = viewController;
19
20 return YES;
21 }
22
23 - (void) popToModal {
24 UIViewController *viewController = self.window.rootViewController;
25
26 // 再创建一个UIView用来切换
27 UIViewController *modalViewController = [[UIViewController alloc] init];
28 modalViewController.view.backgroundColor = [UIColor blueColor];
29
30 // 创建一个NavigationController来包装
31 UINavigationController *naviController = [[UINavigationController alloc] initWithRootViewController:modalViewController];
32 modalViewController.navigationItem.title = @"蓝色";
33
34 // 切换到navigationController
35 [viewController presentViewController:naviController animated:YES completion:^{
36 NSLog(@"完成modal切换");
37 }];
38 }
 
 
 
2.使用storyboard
(1)拖入相应控制器并连线
 
使用“modal”进行跳转,而不是之前的“push”
 
(2)关闭modal,回跳
GreenViewController:
1 - (IBAction)goback:(UIBarButtonItem *)sender {
2 // 关闭modal
3 // 1.可以使用自己
4 // [self dismissViewControllerAnimated:YES completion:nil];
5
6 // 2.也可以使用上一层的navigation controller
7 [self.navigationController dismissViewControllerAnimated:YES completion:nil];
8 }
 
(3)关于modal连线的数据传输问题
a.顺传:使用segue的控制器
“红”控制器传送字符串给“绿”控制器:
 1 /*
2 * 在这里传输数据给modal控制器
3 * 顺传,使用控制器
4 */
5 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
6 // 1.取得modal转向的controller,这里是中间的navigation controller
7 UINavigationController *nvController = (UINavigationController *)segue.destinationViewController;
8
9 // 2.取得modal最终显示的controller, 就是最后的UIViewController
10 GreenViewController *greenController = (GreenViewController *)nvController.topViewController;
11
12 // 3.传输数据
13 greenController.name = @"我就是一个modal窗口";
14 }
 
 
b.逆传:使用代理
“绿”控制器传送数据给“红”控制器
 
 

[iOS基础控件 - 6.12.2] Modal的更多相关文章

  1. [iOS基础控件 - 6.12.1] QQ菜单管理 UITabBarController 控制器管理

    A.需求 1.类似QQ.微信顶部或者底部的窗口转换导航条 2.给每个页面添加相应内容   B.UITabBarController 1.基本概念: (1)内容高度 iOS7之前内容高度为:屏幕高度 - ...

  2. [iOS基础控件 - 6.12.3] @property属性 strong weak copy

    A.概念 @property 的修饰词   strong: 强指针/强引用(iOS6及之前是retain) weak: 弱智真/弱引用(iOS6及之前是assign)   默认情况所有指针都是强指针 ...

  3. [iOS基础控件 - 6.12.4] NavigationController vs TabBarController

    A.属性 1. Item NavigationController: navigationItem (不需要创建) title rightBarButtonItems/ rightBarButtonI ...

  4. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  5. iOS 基础控件(下)

    上篇介绍了UIButton.UILabel.UIImageView和UITextField,这篇就简短一点介绍UIScrollView和UIAlertView. UIScrollView 顾名思义也知 ...

  6. [iOS基础控件 - 6.11.3] 私人通讯录Demo 控制器的数据传递、存储

    A.需求 1.搭建一个"私人通讯录"Demo 2.模拟登陆界面 账号 密码 记住密码开关 自动登陆开关 登陆按钮 3.退出注销 4.增删改查 5.恢复数据(取消修改)   这个代码 ...

  7. [iOS基础控件 - 6.10.2] PickerView 自定义row内容 国家选择Demo

    A.需求 1.自定义一个UIView和xib,包含国家名和国旗显示 2.学习row的重用   B.实现步骤 1.准备plist文件和国旗图片     2.创建模型 // // Flag.h // Co ...

  8. [iOS基础控件 - 7.0] UIWebView

    A.基本使用 1.概念 iOS内置的浏览器控件 Safari浏览器就是通过UIWebView实现的   2.用途:制作简易浏览器 (1)基本请求 创建请求 加载请求 (2)代理监听webView加载, ...

  9. [iOS基础控件 - 6.9.3] QQ好友列表Demo TableView

    A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组   code so ...

随机推荐

  1. Redis VS Memcached

    1. Redis & Memecached比较   内存管理 持久化 数据类型 客户端支持 并发性能 Memcached 预分配的内存池的方式 不支持持久化 支持简单的key-value存储 ...

  2. eclipse教程

    http://www.eclipse.org/downloads/eclipse-packages/http://wiki.eclipse.org/Eclipse_Articles,_Tutorial ...

  3. csv,txt,excel文件之间的转换,perl脚本

    最近接触一些需要csv,txt,excel文件之间的转换,根据一些网上搜索加上自己的改动,实现自己想要的结果为主要目的,代码的出处已经找不到了,还请见谅,以下主要是针对csv&excel 和t ...

  4. LA 2572 (求可见圆盘的数量) Kanazawa

    题意: 把n个圆盘依次放到桌面上,按照放置的先后顺序给出这n个圆盘的圆心和半径,输出有多少个圆盘可见(即未被全部覆盖). 分析: 题中说对输入数据进行微小扰动后答案不变. 所露出的部分都是由若干小圆弧 ...

  5. nginx反向代理的简单配置

    有两台机器A和B. A上边是nginx,B上边是tomcat. 现在要通过A的反向代理功能,通过A的nginx访问到B的tomcat. 首先tomcat已经配置好,并且正确启动,可访问.       ...

  6. 随机森林与GBDT

    前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over- ...

  7. redhat--nagios插件--check_traffic.sh

    ****在被监控主机安装nrpe**** (1)在被监控主机上,增加用户和密码 useradd nagios passwd nagios (2)安装nagios插件 tar zxf nagios-pl ...

  8. 在web.config里使用configSource分隔各类配置

    转:http://www.yongfa365.com/Item/using-configSource-Split-Configs.html 大型项目中,可能有多个Service,也就是会有一堆配置,而 ...

  9. UVA 10047 The Monocycle

    大白图论第二题··· 题意:独轮车的轮子被均分成五块,每块一个颜色,每走过一个格子恰好转过一个颜色. 在一个迷宫中,只能向前走或者左转90度或右转90度(我曾天真的认为是向左走和向右走···),每个操 ...

  10. [转] AE之分级颜色专题图渲染

    原文 AE之分级颜色专题图渲染 参考代码1 private void 分级渲染ToolStripMenuItem_Click(object sender, EventArgs e) { //值分级 I ...