在我们开发的过程中经常要控制视图出现顺序已达到良好的视图效果,这时候就要合理的判断每个视图控制器在程序中出现的顺序,以便达到需求。这里用代码直观的解释更为准确:
MainViewController.m文件
(DetailViewController为创建的详情页面的控制器)
#import "MainViewController.h"
#import "DetailViewController.h"
@interface MainViewController ()
@end
@implementation MainViewController
/*
根视图执行顺序,始终是根视图的变化过程
//刚启动程序的视图执行顺序
initWithNibName
init
loadView
viewDidLoad
viewWillAppear
viewDidAppear
//此时点击button跳转
viewWillDisappear
viewDidDisappear
//此时点击返回button回到第一界面
viewWillAppear
viewDidAppear
【注】loadView、viewDidLoad默认执行一次 不会随界面跳转返回重复执行 通常不要手动调用该方法
【注】通过第二个界面改变第一个界面内容,通常在第一界面的viewWillAppear或viewDidAppear方法中执行
*/
//仍为初始化方法 当使用xib(可视化图形界面编程)时会使用
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
NSLog(@"initWithNibName");
}
return self;
}
//视图控制器初始化方法 通常用于初始化成员变量与属性
- (instancetype)init{
if (self = [super init]) {
NSLog(@"init");
}
return self;
}
//加载视图 如果不重写该方法 创建视图控制器时 会自动调用该方法创建View 如果重写了 一定要书写[super loadView]
- (void)loadView{
[super loadView];
NSLog(@"loadView");
}
//视图加载完成的方法
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"viewDidLoad");
self.view.backgroundColor = [UIColor greenColor];
//创建跳转按钮
UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:@"跳转详情页面" forState:UIControlStateNormal];
button.frame = CGRectMake(50, 100, 275, 50);
[button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
// Do any additional setup after loading the view.
}
//按钮点击事件
- (void)buttonClick{
//跳转
DetailViewController * detailVC = [[DetailViewController alloc]init];
[self presentViewController:detailVC animated:YES completion:nil];
}
//视图将要出现的方法
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
NSLog(@"viewWillAppear");
}
//视图已经出现的方法
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
NSLog(@"viewDidAppear");
}
//视图将要消失的方法
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
NSLog(@"viewWillDisappear");
}
//视图已经消失的方法
- (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
NSLog(@"viewDidDisappear");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
DetailViewController.m文件
#import "DetailViewController.h"
@interface DetailViewController ()
@end
@implementation DetailViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor yellowColor];
UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:@"返回第一界面" forState:UIControlStateNormal];
button.frame = CGRectMake(50, 100, 275, 50);
[button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
// Do any additional setup after loading the view.
}
//返回按钮点击事件
- (void)buttonClick{
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
配图: