一共有三种方式可以创建控制器:直接创建、storyboard、xib
直接创建:
HMViewController *hm = [[HMViewController alloc] init];
storyboard:
//设置窗口:
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//加载控制器
//参数一:Main,文件名,系统默认是main.storyboard,不需要后缀显示
//参数二:nil = [NSBundle mainBundle]
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
//创建storyboard描述的控制器
方法一:instantiateInitialViewController帮你加载箭头指向的控制器
UIViewController *vc = [storyboard instantiateInitialViewController];
方法二:根据标识符创建storyboard描述的控制器
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"org"];
// 将控制器添加到窗口
self.window.rootViewController = vc;
// 将窗口设置为可见
[self.window makeKeyAndVisible];
注意:storyboard只能加载系统自己的,自己自定义的只能用xib的方式去加载,因为类型不匹配
xib:
//创建窗口
self.window = [[UIWindow alloc] initWithFrame: [UIScreen mainScreen].bounds];
//加载名为ViewController的xib文件
UIViewController *vc = [[UIViewController alloc] initWithNibName:@"ViewController" bundle:nil];
//将控制器添加到窗口
self.window.rootViewController = vc;
//将窗口设置为可见
[self.window makeKeyAndVisible];
延迟加载
// 控制器的view加载完成的时候调用
-(void)viewDidLoad{
[super viewDidLoad];
UIView *baby = [[UIView alloc] init];
baby.backgroundColor = [UIColor blueColor];
[self.view addSubview:baby];
}
延迟加载原理:
在主线程自己创建了一个蓝色的view最后在控制器显示的是下面红色的view,最后它会调用下面的这个代理方法,所以显示的是红色的view,而不是蓝色的view
当应用程序启动完成的时候,系统会自动调用代理这个方法
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *baby = [[UIViewController alloc] init];
baby.view.backgroundColor = [UIColor redColor];
self.window.rootViewController = baby;
[self.window makeKeyAndVisible];
return YES;
}
多控制器
一个iOS的app很少只由一个控制器组成,除非这个app极其简单 当app中有多个控制器的时候,我们就需要对这些控制器进行管理,有多个view时,可以用一个大的view去管理1个或者多个小view
控制器也是如此,用1个控制器去管理其他多个控制器
比如,用一个控制器A去管理3个控制器B、C、D,控制器A被称为控制器B、C、D的“父控制器”,控制器B、C、D的被称为控制器A的“子控制器”
为了便于管理控制器,iOS提供了2个比较特殊的控制器
UINavigationController 和 UITabBarController
...
网友评论