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. oracle .bash_profile

    [oracle@redhat4 ~]$ vi .bash_profile # .bash_profile # Get the aliases and functionsif [ -f ~/.bashr ...

  2. TCP/IP 与OSI结构图

    OSI参考模型各层的作用 物理层:在物理媒体上传输原始的数据比特流. 数据链路层:将数据分成一个个数据帧,以数据帧为单位传输.有应有答,遇错重发. 网络层:将数据分成一定长度的分组,将分组穿过通信子网 ...

  3. 面试题_93_to_102_编程和代码相关的面试题

    93)怎么检查一个字符串只包含数字?(解决方案) 94)Java 中如何利用泛型写一个 LRU 缓存?(答案<) 95)写一段 Java 程序将 byte 转换为 long?(答案) 95)在不 ...

  4. A06_RelativeLayout的属性设置

    设有两个控件one和two,以控件one为基准.由于代码比较简单就不贴了,直接上效果图. 一.第一组:将控件two放在控件one的上.下.左.右.开始.结束. android:layout_below ...

  5. Oracle默认的用户名和密码

    你是说默认的用户名和密码么scott 密码是 tigersys 密码是 change_on_installsystem 密码是 managersysman 密码是 oem_temp 其中直接管理模式可 ...

  6. 关于post get ajax

    今天写程序时  出现了下面问题: 前台 $.post('ajax/GetDataAjax.ashx', { 'mode': 'DEL', 'BM_ID': bm_id }, function (res ...

  7. php.ini配置中文详解

    ;;;;;;;;;;; ; 警告 ; ;;;;;;;;;;; ; 此配置文件是对于新安装的PHP的默认设置. ; 默认情况下,PHP使用此配置文件安装 ; 此配置针对开发目的,并且*不是*针对生产环境 ...

  8. MYSQL自动备份策略的选择

    目前流行几种备份方式: 1.逻辑备份:使用mysql自带的mysqldump工具进行备份.备份成sql文件形式.优点:最大好处是能够与正在运行的mysql自动协同工作,在运行期间可以确保备份是当时的点 ...

  9. 【DFS,双向】NYOJ-20-吝啬的国度

    [题目链接:NYOJ-20] 很巧妙,要好好想想 #include <iostream> #include <stdio.h> #include <vector> ...

  10. 安装Android SDK时,点击SDK Manager.exe闪退,并且jdk的环境变量是对的。

    前提:我的jdk的环境变量是正确的,同时我的jdk还是1.7应该不是版本太低的原因,同时这个压缩文件是好的,我在其他的电脑上可以运行SDK Manager.exe. 点击SDK Manager.exe ...