ViewController的生命周期
函数介绍
viewDidLoda:在视图加载后被调用,如果是在代码中创建的视图加载器,他将会在loadView方法后被调用,如果是从nib视图页面输出,他将会在视图设置好后后被调用。此函数在视图销毁之前只会调用一次.想调用第二次除非视图已经销毁.然后重新创建。
loadView:每次访问controller的view(比如controller.view、self.view)且view为nil,loadView方法就会被调用。用于创建Controller的View。
viewWillAppear:视图将要显示,这个方法的首次调用是在viewDidLoad创建了视图并且马上将要显示的时候。
viewDidAppear:视图已经显示,一般这个方法是在viewWillAppear之后调用的。
viewWillDisAppear:视图即将消失,这个方法会在视图将要消失的时候调用.比如按push的时候.Apush到B.先调用B的viewDidLoad(不用考虑LoadView).然后调用A的viewWillDisAppear.然后是B的viewWillAppear。
viewDidDisAppear:视图已经消失,在Controller被切换时调用,第二个视图出现后第一个视图消失。
viewWillLayoutSubviews: 控制器的view将要布局子控件(在这个方法里,部署需要改变重新刷新view的代码,功能类似view的layoutSubViews()这个方法,需要注意的是,这个方法里一般都需要重置的view的frame,宽度和高度的获取,因此view的frame一般都写在这个方法里)。
viewDidLayoutSubviews: 控制器的view布局子控件完成。
实例
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property(nonatomic , strong)UIButton *button;
@end
#import "ViewController.h"
#import "SonViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"viewDidLoad");
_button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
_button.frame = CGRectMake(195, 422, 80, 80);
[_button setTitle:@"按钮" forState:UIControlStateNormal];
[_button addTarget:self action:@selector(press) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_button];
}
- (void)press {
SonViewController *son = [[SonViewController alloc] init];
son.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:son animated:NO completion:nil];
}
- (void)loadView {
[super loadView];
NSLog(@"loadView");
}
- (void)viewDidAppear:(BOOL)animated {
NSLog(@"viewDidAppear!");
}
- (void)viewDidDisappear:(BOOL)animated {
NSLog(@"viewDidDisappear!");
}
- (void)viewWillAppear:(BOOL)animated {
NSLog(@"viewWillAppear!");
}
- (void)viewWillDisappear:(BOOL)animated {
NSLog(@"viewWillDisappear!");
}
- (void)viewDidLayoutSubviews {
NSLog(@"viewDidLayoutSubviews!");
}
- (void)viewWillLayoutSubviews {
NSLog(@"viewWillLayoutSubviews!");
}
@end
@interface SonViewController : UIViewController
@property(nonatomic , strong)UIButton *backButton;
@end
#import "SonViewController.h"
@interface SonViewController ()
@end
@implementation SonViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor yellowColor];
NSLog(@"viewDidLoad");
_backButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
_backButton.frame = CGRectMake(195, 422, 80, 80);
[_backButton setTitle:@"按钮" forState:UIControlStateNormal];
[_backButton addTarget:self action:@selector(press) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_backButton];
}
- (void)press {
[self dismissViewControllerAnimated:NO completion:nil];
}
- (void)viewDidDisappear:(BOOL)animated {
NSLog(@"sonviewDidDisappear");
}
- (void)viewWillDisappear:(BOOL)animated {
NSLog(@"sonviewWillDisappear");
}
- (void)viewDidAppear:(BOOL)animated {
NSLog(@"sonviewDidAppear");
}
- (void)viewWillAppear:(BOOL)animated {
NSLog(@"sonviewWillAppear");
}
@end