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的代码:

[objc] view plaincopy在CODE上查看代码片派生到我的代码片
  1. #import "ViewController.h"  
  2. #import "SubViewController.h"  
  3.   
  4. @interface ViewController ()  
  5.   
  6. @end  
  7.   
  8. @implementation ViewController  
  9.   
  10. - (void)viewDidLoad {  
  11.     [super viewDidLoad];  
  12.     //self是试图控制器,视图控制器的背景颜色  
  13.     self.view.backgroundColor=[UIColor orangeColor];  
  14.     //查看试图控制器位置和大小,x和y都是0,在状态栏下面,所以布局时需要考虑状态栏  
  15.     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);  
  16.       
  17.     //新建一个视图控制器类,点击按钮后从本类调转到新建的那个类中,然后再点击一个按钮返回,即从一个view调转到另一个view  
  18.     //新建了一个SubViewController,继承自ViewController  
  19.     //以下是一个按钮,点击后跳转到SubViewController的那个视图  
  20.     UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];  
  21.     btn1.frame=CGRectMake(103030030);  
  22.     btn1.backgroundColor=[UIColor whiteColor];  
  23.     [btn1 setTitle:@"跳转" forState:UIControlStateNormal];  
  24.     [btn1 addTarget:self action:@selector(jumpTo) forControlEvents:UIControlEventTouchUpInside];  
  25.     [self.view addSubview:btn1];  
  26.       
  27.     // Do any additional setup after loading the view, typically from a nib.  
  28. }  
  29. //跳转,其实就是打开一个模式对话窗口,所以是present,相当于在本视图控制器上呈现子视图控制器,所以所谓返回,就是关闭这个窗口,而不是子视图控制器中再打开本视图控制器,那就乱套了  
  30. //这个适合点击进去,然后有返回按钮的视图之间的跳转  
  31. -(void)jumpTo{  
  32.     //这里因为是每次点击按钮会重新实例化一个子视图控制器,所以每次进入这个子视图控制器都是新的,所以都需要进入子视图控制器的loadView和viewDidLoad  
  33.     //改进是先设置为全局变量SubViewController *subvc1;  
  34.     //然后在viewDidLoad中实例初始化,不要在此处。所以下面的一句话删除即可  
  35.     SubViewController *subvc1=[[SubViewController alloc]init];  
  36.     //这个视图控制器之间的跳转动画,可以设置,一共四种  
  37.     //如果你只知道某一个方法的一部分字符,可以“CMD+点击”到这个类里面去,然后CMD+F查找,基本可以解决问题  
  38.     //UIModalTransitionStyleCoverVertical-默认的,从下来,往下去  
  39.     //UIModalTransitionStyleCrossDissolve-渐变出现和消失  
  40.     //UIModalTransitionStyleFlipHorizontal-水平翻转,翻转时可看到底色  
  41.     //UIModalTransitionStylePartialCurl-翻书效果,早期版本翻书后会留个尾巴遮住部分视图,新版本中不会遮住,翻完不留东西在视图中  
  42.     subvc1.modalTransitionStyle=UIModalTransitionStylePartialCurl;  
  43.     [self presentViewController:subvc1 animated:YES completion:^{  
  44.           
  45.     }];  
  46. }  
  47. //每次检查内存中又没有view,没有就loadView然后viewDidLoad,然后进入viewWillAppear,否则直接进入viewWillAppear,一般第二次运行就是  
  48. -(void)loadView{  
  49.     [super loadView];  
  50. }  
  51. -(void)viewWillAppear:(BOOL)animated{  
  52.     [super viewWillAppear:animated];  
  53. }  
  54. -(void)viewDidAppear:(BOOL)animated{  
  55.     [super viewDidAppear:animated];  
  56. }  
  57. -(void)viewWillDisappear:(BOOL)animated{  
  58.     [super viewWillDisappear:animated];  
  59. }  
  60. -(void)viewDidDisappear:(BOOL)animated{  
  61.     [super viewDidDisappear:animated];  
  62. }  
  63. //以下方法由系统自动调用,不可手动写  
  64. //-(void)viewDidUnload{  
  65. //  
  66. //}  
  67. //在进入程序时候如果有低内存警告,我们一般是删除一些视图释放一些内存  
  68. //如果已经切换或者关闭视图即viewDidDisappear后由低内存警告,则一般系统会执行viewDidUnload,那么下次我们再运行时,内存中就没有view,则需要再次经过loadView和viewDidLoad后进入viewWillAppear  
  69. - (void)didReceiveMemoryWarning {  
  70.     [super didReceiveMemoryWarning];  
  71.     // Dispose of any resources that can be recreated.  
  72. }  
  73.   
  74. @end  

以下是SubViewController.m的代码:

[objc] view plaincopy在CODE上查看代码片派生到我的代码片
  1. #import "SubViewController.h"  
  2. #import "ViewController.h"  
  3.   
  4. @interface SubViewController ()  
  5.   
  6. @end  
  7.   
  8. @implementation SubViewController  
  9.   
  10. - (void)viewDidLoad {  
  11.     [super viewDidLoad];  
  12.     //在子视图控制器中设置一个按钮,用来点击返回主视图控制器  
  13.     UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect];  
  14.     btn1.frame=CGRectMake(103030030);  
  15.     btn1.backgroundColor=[UIColor whiteColor];  
  16.     [btn1 setTitle:@"返回" forState:UIControlStateNormal];  
  17.     [btn1 addTarget:self action:@selector(backTo) forControlEvents:UIControlEventTouchUpInside];  
  18.     [self.view addSubview:btn1];  
  19.     self.view.backgroundColor=[UIColor purpleColor];  
  20.     // Do any additional setup after loading the view.  
  21. }  
  22.   
  23. -(void)backTo{  
  24.     //用dismissViewControllerAnimated解除关闭这个模式对话窗口即相当于跳转返回  
  25.     [self dismissViewControllerAnimated:YES completion:^{  
  26.   
  27.     }];  
  28.     //以下方式是打开新的模式对话窗口的形式来跳转,这样的跳转其实不是返回,而只是打开一个新的,不建议这么做  
  29.     //ViewController *mainvc=[[ViewController alloc]init];  
  30.     //[self presentViewController:mainvc animated:YES completion:^{  
  31.     //  
  32.     //}];  
  33. }  
  34.   
  35. -(void)loadView{  
  36.     [super loadView];  
  37. }  
  38. -(void)viewWillAppear:(BOOL)animated{  
  39.     [super viewWillAppear:animated];  
  40. }  
  41. -(void)viewDidAppear:(BOOL)animated{  
  42.     [super viewDidAppear:animated];  
  43. }  
  44. -(void)viewWillDisappear:(BOOL)animated{  
  45.     [super viewWillDisappear:animated];  
  46. }  
  47. -(void)viewDidDisappear:(BOOL)animated{  
  48.     [super viewDidDisappear:animated];  
  49. }  
  50.   
  51. - (void)didReceiveMemoryWarning {  
  52.     [super didReceiveMemoryWarning];  
  53.     // Dispose of any resources that can be recreated.  
  54. }  
  55.   
  56. /* 
  57. #pragma mark - Navigation 
  58.  
  59. // In a storyboard-based application, you will often want to do a little preparation before navigation 
  60. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
  61.     // Get the new view controller using [segue destinationViewController]. 
  62.     // Pass the selected object to the new view controller. 
  63. } 
  64. */  
  65.   
  66. @end 

0 0
原创粉丝点击