iOS开发UIViewCOntroller视图控制器之间跳转切换举例,以及视图控制器生命周期的简单说明
来源:互联网 发布:淘宝量子恒道怎么添加 编辑:程序博客网 时间:2024/05/04 05:02
转载自:http://blog.csdn.net/weisubao/article/details/39620795
(1)视图控制图可以理解成有两部分,有一个部分是控制的,还有一部分是视图,比如我们在ViewController类里面写得self相当于视图控制器,而self.view相当于是视图控制器的视图。视图控制器默认是从(0,0)位置开始的,背景是透明的。
(2)视图控制器之间的切换方式之一是,presentViewController和dismissViewControllerAnimated,也就是类似于”点击进入下一层,返回进入上一层“这种调转切换,前一个方法类似于在就窗口上打开一个新的,后一个方法类似于关闭当前窗口返回去。
(3)UIViewController的生命周期,也就是加载、呈现、退出等等一些过程。下图显示的比较清楚。需要说明的是,在本例中两个UIViewController之间切换,执行的方法顺序是:第一个的viewWillDisappear >>> 第二个的viewWillAppear >>> 第二个的viewDidAppear >>> 第一个的viewDidDisappear。
(4)如果只知道一个方法的一部分,而且是中间的部分(字符单词),如何找出这个方法?“CMD+点击”这个类,一直追朔到这个类的系统类,如UIViewController类,然后进去按CMD+F查找,输入我们知道的那部分单词,很快就找到。
以下是ViewController.m的代码:
- #import "ViewController.h"
- #import "SubViewController.h"
- @interface ViewController ()
- @end
- @implementation ViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- //self是试图控制器,视图控制器的背景颜色
- self.view.backgroundColor=[UIColor orangeColor];
- //查看试图控制器位置和大小,x和y都是0,在状态栏下面,所以布局时需要考虑状态栏
- NSLog(@"%f,%f,%f,%f",self.view.frame.origin.x,self.view.frame.origin.y,self.view.frame.size.width,self.view.frame.size.height);
- //新建一个视图控制器类,点击按钮后从本类调转到新建的那个类中,然后再点击一个按钮返回,即从一个view调转到另一个view
- //新建了一个SubViewController,继承自ViewController
- //以下是一个按钮,点击后跳转到SubViewController的那个视图
- UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];
- btn1.frame=CGRectMake(10, 30, 300, 30);
- btn1.backgroundColor=[UIColor whiteColor];
- [btn1 setTitle:@"跳转" forState:UIControlStateNormal];
- [btn1 addTarget:self action:@selector(jumpTo) forControlEvents:UIControlEventTouchUpInside];
- [self.view addSubview:btn1];
- // Do any additional setup after loading the view, typically from a nib.
- }
- //跳转,其实就是打开一个模式对话窗口,所以是present,相当于在本视图控制器上呈现子视图控制器,所以所谓返回,就是关闭这个窗口,而不是子视图控制器中再打开本视图控制器,那就乱套了
- //这个适合点击进去,然后有返回按钮的视图之间的跳转
- -(void)jumpTo{
- //这里因为是每次点击按钮会重新实例化一个子视图控制器,所以每次进入这个子视图控制器都是新的,所以都需要进入子视图控制器的loadView和viewDidLoad
- //改进是先设置为全局变量SubViewController *subvc1;
- //然后在viewDidLoad中实例初始化,不要在此处。所以下面的一句话删除即可
- SubViewController *subvc1=[[SubViewController alloc]init];
- //这个视图控制器之间的跳转动画,可以设置,一共四种
- //如果你只知道某一个方法的一部分字符,可以“CMD+点击”到这个类里面去,然后CMD+F查找,基本可以解决问题
- //UIModalTransitionStyleCoverVertical-默认的,从下来,往下去
- //UIModalTransitionStyleCrossDissolve-渐变出现和消失
- //UIModalTransitionStyleFlipHorizontal-水平翻转,翻转时可看到底色
- //UIModalTransitionStylePartialCurl-翻书效果,早期版本翻书后会留个尾巴遮住部分视图,新版本中不会遮住,翻完不留东西在视图中
- subvc1.modalTransitionStyle=UIModalTransitionStylePartialCurl;
- [self presentViewController:subvc1 animated:YES completion:^{
- }];
- }
- //每次检查内存中又没有view,没有就loadView然后viewDidLoad,然后进入viewWillAppear,否则直接进入viewWillAppear,一般第二次运行就是
- -(void)loadView{
- [super loadView];
- }
- -(void)viewWillAppear:(BOOL)animated{
- [super viewWillAppear:animated];
- }
- -(void)viewDidAppear:(BOOL)animated{
- [super viewDidAppear:animated];
- }
- -(void)viewWillDisappear:(BOOL)animated{
- [super viewWillDisappear:animated];
- }
- -(void)viewDidDisappear:(BOOL)animated{
- [super viewDidDisappear:animated];
- }
- //以下方法由系统自动调用,不可手动写
- //-(void)viewDidUnload{
- //
- //}
- //在进入程序时候如果有低内存警告,我们一般是删除一些视图释放一些内存
- //如果已经切换或者关闭视图即viewDidDisappear后由低内存警告,则一般系统会执行viewDidUnload,那么下次我们再运行时,内存中就没有view,则需要再次经过loadView和viewDidLoad后进入viewWillAppear
- - (void)didReceiveMemoryWarning {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- @end
以下是SubViewController.m的代码:
- #import "SubViewController.h"
- #import "ViewController.h"
- @interface SubViewController ()
- @end
- @implementation SubViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- //在子视图控制器中设置一个按钮,用来点击返回主视图控制器
- UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];
- btn1.frame=CGRectMake(10, 30, 300, 30);
- btn1.backgroundColor=[UIColor whiteColor];
- [btn1 setTitle:@"返回" forState:UIControlStateNormal];
- [btn1 addTarget:self action:@selector(backTo) forControlEvents:UIControlEventTouchUpInside];
- [self.view addSubview:btn1];
- self.view.backgroundColor=[UIColor purpleColor];
- // Do any additional setup after loading the view.
- }
- -(void)backTo{
- //用dismissViewControllerAnimated解除关闭这个模式对话窗口即相当于跳转返回
- [self dismissViewControllerAnimated:YES completion:^{
- }];
- //以下方式是打开新的模式对话窗口的形式来跳转,这样的跳转其实不是返回,而只是打开一个新的,不建议这么做
- //ViewController *mainvc=[[ViewController alloc]init];
- //[self presentViewController:mainvc animated:YES completion:^{
- //
- //}];
- }
- -(void)loadView{
- [super loadView];
- }
- -(void)viewWillAppear:(BOOL)animated{
- [super viewWillAppear:animated];
- }
- -(void)viewDidAppear:(BOOL)animated{
- [super viewDidAppear:animated];
- }
- -(void)viewWillDisappear:(BOOL)animated{
- [super viewWillDisappear:animated];
- }
- -(void)viewDidDisappear:(BOOL)animated{
- [super viewDidDisappear:animated];
- }
- - (void)didReceiveMemoryWarning {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- /*
- #pragma mark - Navigation
- // In a storyboard-based application, you will often want to do a little preparation before navigation
- - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
- // Get the new view controller using [segue destinationViewController].
- // Pass the selected object to the new view controller.
- }
- */
- @end
0 0
- iOS开发UIViewCOntroller视图控制器之间跳转切换举例,以及视图控制器生命周期的简单说明
- 【iOS开发-20】UIViewCOntroller视图控制器之间跳转切换举例,以及视图控制器生命周期的简单说明
- iOS开发之UIViewController视图控制器之间跳转
- UIViewController的切换(视图控制器切换)
- 视图控制器之间的切换
- UIViewController(视图控制器)下的View切换
- iOS开发之视图控制器(UIViewController)
- ios开发之视图控制器(UIViewController)-- 详解
- iOS开发之视图控制器(UIViewController)
- iOS 视图控制器的生命周期
- IOS视图控制器的生命周期
- iOS视图控制器的生命周期
- iOS视图控制器的生命周期
- IOS学习 UIViewController 视图控制器的创建
- iOS 视图控制器生命周期
- iOS 视图控制器(UIViewController)剖析
- iOS 视图控制器(UIViewController)剖析
- iOS 视图控制器(UIViewController)剖析
- 该好好复习了,没多少时间了
- 苹果在15年2月就要强制要求必须支持x64的app
- 使用Java搜索特定后缀名的文件
- Android中判断网络连接是否可用及监控网络状态
- 念整数
- iOS开发UIViewCOntroller视图控制器之间跳转切换举例,以及视图控制器生命周期的简单说明
- 2014 年 9 个最佳的 Sublime Text 2/3 主题
- mysql数据库wait_timeout等待时间
- 圣诞快乐——向Google致敬——向linux致敬——向stackoverflow致敬——向openStack 致敬——永不退缩
- linux用户和组
- wamp 配置 mysql配置 时间配置 虚拟主机配置 thinkphp配置smarty配置
- leetcode:Excel Sheet Column Title
- Ubuntu中网络图标不见了
- mvn