创建控制器
- 通过代码的方式加载viewController
CYViewController *controller = [[CYViewController alloc] init]; self.window.rootViewController = controller; [self.window makeKeyAndVisible];
- 通过storyboard加载viewController
- 箭头指向的viewController(RootViewController)
2 加载storyboard中特定标示的viewControllerUIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; //加载箭头指向的viewController CYViewController *controller = [storyboard instantiateInitialViewController];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; CYViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"two"];
- 通过xib加载viewController
创建Xib,并指定xib的files owner为自定义控制器类(为了能连线关联管理IB的内容)
xib中要有内容,且xib中描述的控制器类的view属性要与xib的view控件完成关联(关联方法两种,一种是control+files owner拖线到xib中搭建的指定view控件,另一种是指定xib中的view拖线到@interface)- 从xib中加载viewController
CYViewController *controller = [[CYViewController alloc] initWithNibName:@"CYOneView" bundle:nil];
-
bundle中取出xib内容
CYViewController *vc = [[NSBundle mainBundle] loadNibNamed:@"Two" owner:nil options:nil].lastObject;
创建视图
- 用系统的loadView方法创建控制器的视图.loadView方法是自动调用的,其原理如下:
1.先判断当前控制器是不是从storyBoard当中加载的,如果是从storyBoard加载的控制器.那么它就会从storyBoard当中加载的控制器的View,设置当前控制器的view.
2.当前控制器是不是从xib当中加载的,如果是从xib当中加载的话,把xib当中指定的View,设置为当前控制器的View.
3.如果也不是从xib加载的,它会创建空白的view.
- 一旦重写,就说明要自定义view
- 如果有xib文件名和控制器的类名前缀(也就是去掉controller)的名字一样的 xib文件 就会用这个xib文件来创建控件器的视图 例:控件器的名为 MJViewController xib文件名为 MJView.xib 如果xib文件名后有一个字不一样就不会去根据它去创建如:MJView8.xib
找和控制器同名的xib文件去创建