概述
UIViewController作为页面和Android中的Activity以及Flutter中的Route意义相同,每一个UIViewController相当于一个页面。
本文重点
- UIViewController创建
- UIViewController生命周期
- UIViewController跳转
示例
UIViewController创建
在日常开发中我们能够操作的整个应用程序的启动类为AppDelegate,而新建工程中ViewController则是第一个页面,我们什么都不用处理只要从ViewController开始写起就可以了。ViewController作为整个app的主页面也是第一个页面。当然如果你是在想换掉它也是可以的,自己去写一个类继承UIViewController然后添加为根视图控制器中。
一个简单的例子:从一个页面跳转到另一个页面,代码如下很简单,主要看注释并自己运行了解各个生命周期函数调用的时机。
第一个页面:
#import "ViewController.h"
#import "SecondViewController.h"
@interface ViewController ()
@end
@implementation ViewController
//页面第一次加载时调用,只调用一次
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSLog(@"viewDidLoad");
//添加个button,点击跳转到新页面
UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(40, 40, 100, 50);
[btn setTitle:@"to second" forState:UIControlStateNormal];
//给button添加点击事件
[btn addTarget:self action:@selector(click) forControlEvents:(UIControlEventTouchUpInside)];
[self.view addSubview:btn];
}
-(void) click{
//将要跳转新页面
SecondViewController* sVC = [SecondViewController new];
//设置新页面是全屏
sVC.modalPresentationStyle = UIModalPresentationFullScreen;
//跳转到新页面
[self presentViewController:sVC animated:YES completion:nil];
}
//视图将显示
-(void) viewWillAppear:(BOOL)animated{
NSLog(@"viewWillAppear");
}
//视图显示瞬间
-(void) viewDidAppear:(BOOL)animated{
NSLog(@"viewDidAppear");
}
//视图将消失
-(void) viewWillDisappear:(BOOL)animated{
NSLog(@"viewWillDisappear");
}
//视图消失瞬间
-(void) viewDidDisappear:(BOOL)animated{
NSLog(@"viewDidDisappear");
}
//内存过低警告接受函数
-(void) didReceiveMemoryWarning{
[super didReceiveMemoryWarning];
}
@end
第二个页面:
创建一个新UIViewController文件很简单,如下操作
选中要新建文件的目标文件夹,本例子中使用根文件夹,然后File->New->File
然后选择如下
点击Next
ok,创建完毕,如下
#import "SecondViewController.h"
@interface SecondViewController ()
@end
@implementation SecondViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//添加一个有颜色的view
UIView* view = [UIView new];
view.frame = CGRectMake(100, 100, 100, 100);
view.backgroundColor = [UIColor redColor];
self.view.backgroundColor = [UIColor whiteColor];
[self.view addSubview:view];
}
//点击屏幕任意一点出发此回调
-(void) touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//退出当前页面
[self dismissViewControllerAnimated:YES completion:nil];
}
@end