【iOS开发-20】UIViewCOntroller视图控制器之间跳转切换举例,以及视图控制器生命周期的简单说明
2014-09-27 23:33
681 查看
(1)视图控制图可以理解成有两部分,有一个部分是控制的,还有一部分是视图,比如我们在ViewController类里面写得self相当于视图控制器,而self.view相当于是视图控制器的视图。视图控制器默认是从(0,0)位置开始的,背景是透明的。
(2)视图控制器之间的切换方式之一是,presentViewController和dismissViewControllerAnimated,也就是类似于”点击进入下一层,返回进入上一层“这种调转切换,前一个方法类似于在就窗口上打开一个新的,后一个方法类似于关闭当前窗口返回去。
(3)UIViewController的生命周期,也就是加载、呈现、退出等等一些过程。下图显示的比较清楚。需要说明的是,在本例中两个UIViewController之间切换,执行的方法顺序是:第一个的viewWillDisappear >>> 第二个的viewWillAppear >>> 第二个的viewDidAppear >>> 第一个的viewDidDisappear。
(4)如果只知道一个方法的一部分,而且是中间的部分(字符单词),如何找出这个方法?“CMD+点击”这个类,一直追朔到这个类的系统类,如UIViewController类,然后进去按CMD+F查找,输入我们知道的那部分单词,很快就找到。
以下是ViewController.m的代码:
以下是SubViewController.m的代码:
截个图:
(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
截个图:
相关文章推荐
- iOS开发UIViewCOntroller视图控制器之间跳转切换举例,以及视图控制器生命周期的简单说明
- Objective-C ,ios,iphone开发基础:多个视图(view)之间的切换2,使用导航栏控制,以及视图之间传值。
- Objective-C ,ios,iphone开发基础:多个视图(view)之间的切换2,使用导航栏控制,以及视图之间传值。
- Objective-C ,ios,iphone开发基础:多个视图(view)之间的切换,以及视图之间传值。
- iOS开发之UIViewController视图控制器之间跳转
- Objective-C ,ios,iphone开发基础:多个视图(view)之间的切换2,使用导航栏控制,以及视图之间传值。
- iOS开发导航控制器下不同视图控制器之间切换:利用CATrasition和view的layer层来实现自定义的动画效果
- Objective-C ,ios,iphone开发基础:多个视图(view)之间的切换,以及视图之间传值。使用parent <->dismiss
- 【iOS开发-24】导航控制器下不同视图控制器之间切换:利用CATrasition和view的layer层来实现自定义的动画效果
- iOS根视图切换,释放内存,以及推送界面跳转(iOS多语言切换语言处理,也请看此处)
- 【iOS开发-79】利用Modal方式实现控制器之间的跳转
- iOS开发UITabBarController的几种代理方法以及结合NSUserDefaults还原上次退出时被选中视图控制器和视图控制器的顺序
- iOS开发那些事--iOS视图生命周期与视图控制器关系
- iOS开发那些事--iOS视图生命周期与视图控制器关系 推荐
- 【iOS开发-4】UIApplication生命周期以及如何简单测试每个函数何时被调用?
- [IOS]iphone开发之横屏与竖屏在不同视图之间的切换
- 【ios】 iphone开发之横屏与竖屏在不同视图之间的切换
- iOS开发那些事--iOS视图生命周期与视图控制器关系
- [IOS]iphone开发之横屏与竖屏在不同视图之间的切换
- 【ios】 iphone开发之横屏与竖屏在不同视图之间的切换