UIViewController:视图控制器, 作用: 控制视图显⽰, 响应事件。分担AppDelegate的工作, 实现模块独立,提高复⽤用性.
视图控制器可以控制视图大小变换, 布局视图, 相应事件, 检测以及处理内存警告, 处理屏幕的旋转.
⾃定义视图类继承UIView。在初始化方法中添加子视图控件。重写controller的loadView方法。创建⾃定义视图对象,并指定为controller的view。将子视图控件对象设置为自定义视图类的属性,在viewDidLoad⽅法中进行设置:添加action、设置delegate等等。在controller中添加按钮点击事件实现和代理⽅方法的实现.
视图控制器的生命周期:
1. 初始化一个视图
-(
instancetype
)init
2. 加载视图
- (
void
)loadView
3. 视图加载完成
- (
void
)viewDidLoad
4. 视图将要显示
- (
void
)viewWillAppear:(
BOOL
)animated
5. 视图已经显示
- (
void
)viewDidAppear:(
BOOL
)animated
6. 视图将要消失 (下一个界面显示时才会实现)
- (
void
)viewWillDisappear:(
BOOL
)animated
7. 视图已经消失 (
下一个界面显示时才会实现
)
- (
void
)viewDidDisappear:(
BOOL
)animated
代码如下:
1. 创建一个视图控制器:
//创建视图控制器
RootViewController *rootVC = [[RootViewController alloc] init];
//把rootVC设置成根视图控制器
self.window.rootViewController = rootVC;
[rootVC release];
2.
/加载视图, 加载自身的self.view
//用加载视图这个方法实现自定义视图
- (void)loadView {
//[super loadView]; 继承
// 创建一个view给视图控制器的self.view
MyView *myView = [[MyView alloc] initWithFrame:[UIScreen mainScreen].bounds];
[myView.button addTarget:self action:@selector(buttonClick:) forControlEvents:(UIControlEventTouchUpInside)];
UITextField *temp = (UITextField *)[myView viewWithTag:2];
temp.delegate = self;
// 给视图控制器的属性view赋值.
self.view = myView;
//与[super loadView]成对出现
// [self.view addSubview:myView];
3.
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//初始化一个模型
Person *person = [[Person alloc] init];
person.name = @"拐球之人";
person.sex = @"是张杰";
MyView *myView = [[MyView alloc] initWithFrame:[UIScreen mainScreen].bounds];
myView.backgroundColor = [UIColor colorWithWhite:0.945 alpha:1.000];
myView.textField.delegate = self;
//利用模型给视图赋值
myView.label.text = person.name;
myView.textField.text = person.sex;
[self.view addSubview:myView];
[myView release];
[person release];
4. 屏幕旋转
/**
*屏幕旋转:
1. 允许修改旋转
2. 设值旋转方向
3. 检测屏幕旋转
*/
//设值允许旋转
- (BOOL)shouldAutorotate {
return YES;
}
//设值各个方向都能旋转
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAll;
}
//检测屏幕旋转
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
NSLog(@"%@", NSStringFromCGSize(size));
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
NSLog(@"内存警告了");
//内存警告了, 我们需要把不用的view视图移除
//1. 这个视图必须被加载过
//2. 不能是当前显示的窗口
if ([self isViewLoaded] == YES && !self.view.window) {
self.view = nil;
} else {
NSLog(@"这个视图可能没有被加载过, 或者是当前显示的窗口");
}
}