多视图应用

一、效果

1. 启动进入蓝色视图界面

2. 点击“按我”按钮跳出警告框

3. 点击最下按钮“Switch View”跳转到黄色视图

二、分析

1. 由三个控制器组成,一个根控制器,控制蓝色视图控制器与黄色视图控制器的转换

2. 最下方的工具栏始终位于视图的最顶层,才不至于被视图覆盖

3. 程序启动只需加载其一,所以用懒加载加载另一视图

三、 实现

1. 使用Main.Storyboard搭建布局

2. 创建蓝、黄控制器模型

3.SwichingViewController.m实现代码

 1 //
 2 //  ViewController.m
 3 //  6.1-多视图应用
 4 //
 5 //  Created by LinKun on 16/7/15.
 6 //  Copyright © 2016年 Apress. All rights reserved.
 7 //
 8 #pragma mark - 根控制器复制两个视图控制器的转换,所以应该包含它们
 9 #import "SwitchingViewController.h"
10 #import "BlueViewController.h"
11 #import "YellowViewController.h"
12
13 @interface SwitchingViewController ()
14 // 两个子视图控制器
15 @property (strong, nonatomic) YellowViewController *yellowViewController;
16 @property (strong, nonatomic) BlueViewController *blueViewController;
17
18 @end
19
20 @implementation SwitchingViewController
21
22 - (void)viewDidLoad {
23     [super viewDidLoad];
24     // Do any additional setup after loading the view, typically from a nib.
25
26     // 实例化storyboard中标记为“Blue”的视图控制器,及蓝色视图控制器的位置大小
27     self.blueViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Blue"];
28     self.blueViewController.view.frame = self.view.frame;
29     // 切换控制器
30     [self switchViewFromViewController:nil toViewController:self.blueViewController];
31
32 }
33
34 #pragma mark - 按钮动作
35 - (IBAction)switchViews:(id)sender {
36     // 懒加载:加载将要切换到的控制器
37     if (!self.yellowViewController.view.superview) {
38         if (!self.yellowViewController) {
39             self.yellowViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Yellow"];
40         }
41     }else {
42             if (!self.blueViewController) {
43                 self.blueViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Blue"];
44             }
45         }
46
47     // 动画效果:开始动画,持续0.4s,运动曲线
48     [UIView beginAnimations:@"View Flip" context:NULL];
49     [UIView setAnimationDuration:0.4];
50     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
51
52
53     if (!self.yellowViewController.view.superview) {
54         // 动画过渡
55         [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
56         self.yellowViewController.view.frame = self.view.frame;
57         [self switchViewFromViewController:self.blueViewController toViewController:self.yellowViewController];
58     } else {
59         [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
60         self.blueViewController.view.frame = self.view.frame;
61         [self switchViewFromViewController:self.yellowViewController toViewController:self.blueViewController];
62     }
63     [UIView commitAnimations];
64 }
65
66 #pragma mark - 转换控制器
67 - (void)switchViewFromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC {
68    // 把当前控制器移除
69     if (fromVC != nil) {
70         [fromVC willMoveToParentViewController:nil];
71         [fromVC.view removeFromSuperview];
72         [fromVC removeFromParentViewController];
73     }
74     // 把转换的控制器加进来
75     if (toVC != nil) {
76         [self addChildViewController:toVC];
77         [self.view insertSubview:toVC.view atIndex:0];
78         [toVC didMoveToParentViewController:self];
79     }
80
81 }
82
83 @end

备注:要切换控制器,先将要切换到的控制器加载出来,然后移除当前控制器,把另一控制器加载到根控制器

4. BlueViewController.h

 1 //
 2 //  BlueViewController.m
 3 //  6.1-多视图应用
 4 //
 5 //  Created by LinKun on 16/7/15.
 6 //  Copyright © 2016年 Apress. All rights reserved.
 7 //
 8
 9 #import "BlueViewController.h"
10
11 @interface BlueViewController ()
12
13 @end
14
15 @implementation BlueViewController
16
17 - (void)viewDidLoad {
18     [super viewDidLoad];
19     // Do any additional setup after loading the view.
20 }
21
22 #pragma mark - 蓝色视图按钮动作
23 - (IBAction)blueButtonPressed:(id)sender {
24
25     // 创建警告表单
26     UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Blue View Button Pressed" message:@"You pressed the button on the blue view" preferredStyle:UIAlertControllerStyleAlert];
27     // 创建按钮
28     UIAlertAction *action = [UIAlertAction actionWithTitle:@"Yes i did" style:UIAlertActionStyleDefault handler:nil];
29     // 把按钮加到表单,把控制权交给表单
30     [alert addAction:action];
31     [self presentViewController:alert animated:YES completion:nil];
32 }
33
34 @end

5. YellowViewController.m

 1 //
 2 //  YellowViewController.m
 3 //  6.1-多视图应用
 4 //
 5 //  Created by LinKun on 16/7/15.
 6 //  Copyright © 2016年 Apress. All rights reserved.
 7 //
 8
 9 #import "YellowViewController.h"
10
11 @interface YellowViewController ()
12
13 @end
14
15 @implementation YellowViewController
16
17 - (void)viewDidLoad {
18     [super viewDidLoad];
19     // Do any additional setup after loading the view.
20 }
21
22 #pragma mark - 黄色视图按钮动作
23 - (IBAction)yellowButtonPressed:(id)sender {
24     // 创建警告表单
25     UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Yellow View Button Pressed" message:@"You pressed the yellow on the blue view" preferredStyle:UIAlertControllerStyleAlert];
26     // 创建按钮
27     UIAlertAction *action = [UIAlertAction actionWithTitle:@"Yes i did" style:UIAlertActionStyleDefault handler:nil];
28
29     // 把按钮加到表单,把控制器权交给表单
30     [alert addAction:action];
31     [self presentViewController:alert animated:YES completion:nil];
32 }
33
34 @end
时间: 2024-10-09 05:57:07

多视图应用的相关文章

Django Book

The Django Book 2.0--中文版 第一章:介绍Django 本书所讲的是Django:一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django,使你能够以最小的代价构建和维护高质量的Web应用. 从好的方面来看,Web 开发激动人心且富于创造性:从另一面来看,它却是份繁琐而令人生厌的工作. 通过减少重复的代码,Django 使你能够专注于 Web 应用上有 趣的关键性的东西. 为了达到这个目标,Django 提供了通用Web开发模式的高度抽象,提供了频繁进行的编程

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

Android零基础入门第61节:滚动视图ScrollView

原文:Android零基础入门第61节:滚动视图ScrollView 前面几期学习了ProgressBar系列组件.ViewAnimator系列组件.Picker系列组件和时间日期系列组件,接下来几期继续来学习常见的其他组件. 一.ScrollView概述 从前面的学习有的同学可能已经发现,当拥有很多内容时屏幕显示不完,显示不全的部分完全看不见.但是在实际项目里面,很多内容都不止一个屏幕宽度或高度,那怎么办呢?那就需要本节学习的ScrollView来完成. 在默认情况下,ScrollView只是

Android零基础入门第60节:日历视图CalendarView和定时器Chronometer

原文:Android零基础入门第60节:日历视图CalendarView和定时器Chronometer 上一期学习了AnalogClock.DigitalClock和TextClock时钟组件,本期继续来学习日历视图CalendarView和定时器Chronometer. 一.CalendarView 日历视图(CalendarView)可用于显示和选择日期,用户既可选择一个日期,也可通过触 摸来滚动日历.如果希望监控该组件的日期改变,则可调用CalendarView的 setOnDateCha

手动创建CView视图

通过VC2010向导创建一个标准的MFC单文档框架,去掉文档/视图结构支持.然后,在资源中插入一个FormView窗口,在MainFrame的Create中创建并显示此视图窗口. CView *pView = (CMainView *)(RUNTIME_CLASS(CMainView)->CreateObject());   if(!pView)   {       MessageBox(_T("创建视图不成功!"));       return 0;   }      CRec

《spring boot》8.2章学习时无法正常启动,报“ORA-00942: 表或视图不存在 ”

在学习<spring boot>一书的过程中,由于原书作者难免有一些遗漏的的地方,或者系统.软件版本不一致.框架更新等各种因素,完全安装书中源码页不能实现项目的正常启动 在8.2章节,演示JPA对oracle的支持时,配置文件中设置了如下代码,正常情况下应该支持数据库自动创建序列和表,但实际启动时却报错"ORA-00942: 表或视图不存在 " spring.datasource.driverClassName=oracle.jdbc.OracleDriver spring

视图框架:Spring MVC 4.0(1)

目录 一.表单标签库 1.1.简介 1.2.常用属性 1.3.form标签与input标签 1.4.checkbox标签 1.5.radiobutton标签 1.6.password标签 1.7.select标签 1.8.option标签 1.9.options标签 1.10.textarea.errors标签 1.11.hidden标签 1.12.radiobuttons 单选列表与checkboxs复选列表 二.视图解析器 2.1.ViewResolver视图解析器 2.2.链式视图解析器

Atitit 数据库view视图使用推荐规范与最佳实践与方法

1. 视图的优点:1 1.1. **提升可读性  定制用户数据,聚焦特定的数据1 1.2. 使用视图,可以简化数据操作.       1 1.3. **提升扩展性 屏蔽底层表的重构变动,免编译免部署热更新2 1.4. B.查询简单化. 2 1.5. C.逻辑数据独立性. 2 1.6. 提高数据安全性,可以不让用户看到表中的某个字段.2 1.7. 合并分离的数据,创建分区视图       2 1.8. 模拟索引列3 2. 缺点3 2.1. 小部分场景下,复杂视图可能会有性能问题,可以使用带参数的s

MySQL系列:视图基本操作

1. 视图简介 1.1 视图定义 视图是一种虚拟的表,是从数据库中一个或多个表中导出来的表. 视图可以从已存在的视图的基础上定义. 数据库中只存放视图的定义,并没有存放视图中的数据,数据存放在原来的表中. 视图中的数据依赖于原来的表中的数据,表中的数据发生变化,显示在视图中的数据也会改变. 1.2 视图作用 (1)增加数据安全性 通过视图,用户只能查询和修改指定的数据. 数据库授权命令可以限制用户的操作权限,但不能限制到特定行和列上.使用视图可以将用户的权限限制到特定的行和列上. (2)提高表的

自定义视图

1.创建一个视图类实现spring的View接口,并且把视图类用@Component注解为sprinmvc组建(重要) package com.hy.springmvc.views; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Compo