[iOS基础控件 - 6.12.2] Modal

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.逆传:使用代理

“绿”控制器传送数据给“红”控制器

时间: 2024-12-17 22:07:38

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

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

A.需求 1.类似QQ.微信顶部或者底部的窗口转换导航条 2.给每个页面添加相应内容 B.UITabBarController 1.基本概念: (1)内容高度 iOS7之前内容高度为:屏幕高度 - 状态栏高度44 - 底部导航条高度49 iOS7及之后,内容高度为整个屏幕 2.使用代码创建初始化 (1)创建一个UITabBarController UITabBarController的使用步骤 初始化UITabBarController 设置UIWindow的rootViewController

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

A.概念 @property 的修饰词 strong: 强指针/强引用(iOS6及之前是retain) weak: 弱智真/弱引用(iOS6及之前是assign) 默认情况所有指针都是强指针 使用 "__weak" 修饰的指针是弱指针 ARC准则:只要没有强指针指向,对象就会被销毁 @property属性的用法 * weak(assign) :  代理\UI控件* strong(retain) : 其他对象(除代理\UI控件\字符串以外的对象)* copy : 字符串 * assign

【iOS基础控件 -15 - 3 】Modal

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

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

A.属性 1. Item NavigationController: navigationItem (不需要创建) title rightBarButtonItems/ rightBarButtonItem (需要创建) leftBarButtonItems/ leftBarButtonItem (需要创建) TabBarController: tabBarItem (不需要创建) title image selected image tag

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

A.概述 在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能 1.按钮点击后,显示为“已下载”,并且不可以再按 2.在屏幕中间弹出一个消息框,通知消息“xx已经被安装”,慢慢消失 3.消息框样式为圆角半透明 B.不使用代理模式,使用app空间组和主View之间的父子View关系 1.在主View中创建一个消息框 主View控制器:ViewController.m 1 // 创建下载成功消息框 2 CGFloat labelWid

iOS基础控件UINavigationController中的传值

iOS基础控件UINavigationController中的传值,代理传值,正向传值,反向传值 #import <UIKit/UIKit.h> //声明一个协议 @protocol SendValue<NSObject> //定义一个方法 - (void)sendBtnTitle:(NSString *)title; @end @interface FirstViewController : UIViewController // 定义代理 @property (nonatomi

ios基础控件之开关按钮(UISwitch)

UISwitch控件是iOS开发的基础控件,是非常简单的一个控件,因为它的方法比较少.UISwitch继承于UIControl基类,因此可以当成活动控件使用. 注意:开关状态通过它的on属性进行读取,该属性是一个BOOL属性 创建: UISwitch* mySwitch = [[ UISwitch alloc]initWithFrame:CGRectMake(0.150.0f,100.0f,0.0f,0.0f)]; 可能你会疑问为什么它的大小都设置为0?没错,它的大小你设置是无效的,系统会为你分

iOS 基础控件(下)

上篇介绍了UIButton.UILabel.UIImageView和UITextField,这篇就简短一点介绍UIScrollView和UIAlertView. UIScrollView 顾名思义也知道这个是和滚动相关的控件,在Android开发时遇到过ScrollView,当内容的尺寸超出了屏幕范围之后,用ScrollView则可以通过滚动的方式使得超出屏幕的那部分内容通过滚动的方式显示出来,在Android里面有水平的ScrollView和垂直的ScrollView,在iOS里面就只有一个S

[iOS基础控件 - 6.9] 聊天界面Demo

A.需求 做出一个类似于QQ.微信的聊天界面 1.每个cell包含发送时间.发送人(头像).发送信息 2.使用对方头像放在左边,我方头像在右边 3.对方信息使用白色背景对话框,我方信息使用蓝色背景对话框 4.隐藏相同的发送时间 5.底部功能按钮:语音按钮.消息输入框.表情按钮.附加按钮 6.响应键盘事件,呼出键盘.隐藏键盘时对上述的视图作出上移操作 7.键盘的发送事件处理 B.实现点 1.底层视图搭建 上部分聊天信息框:UITableView 下部分功能区:UIButton 信息输入框使用无边框