ViewController控制器的多种创建方式
2016-07-10 00:22
381 查看
第一种方式:
使用class
创建控制器
ViewController *controller = [[ViewController alloc] init];
第二种方式:
使用storyboard
//
实例化 storyboard对象
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main"
bundle:nil];
//
取出storyboard中的
控制器 ,
使用这种方式实例化控制器的时候,
箭头必须在,如果不存在,
就会加载不到控制器
UIViewController
*controller = [storyboard
instantiateInitialViewController];
第三种:
通过
storyboard 的
storyboard ID
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main"
bundle:nil];
UIViewController
*controller = [storyboard instantiateViewControllerWithIdentifier:@"bigfang"];
第四种:
加载xib
UIViewController *controller = [[NSBundle mainBundle] loadNibNamed:@"LoadXib"
owner:nil
options:nil].lastObject;
第五种:
实例化xib
UIViewController *controller = [[UIViewController alloc] initWithNibName:@"IntinalTest"
bundle:nil];
在此附上常见的两个BUG:
1. 在xib中没有view存在
reason: '-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named "IntinalTest"'
2. view没有进行关联
reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "IntinalTest" nib but the view
outlet was not set.'
第六种:
和同类名xib(不使用storyboard)
//
如果存在和类名相同的xib ,
通过 alloc init
方法,内部会优先加载xib
TestViewController *controller = [[TestViewController alloc] init];
// 1.
实例化一个window
self.window
= [[UIWindow
alloc]
initWithFrame:[UIScreen
mainScreen].bounds];
self.window.backgroundColor
= [UIColor
whiteColor];
// 2.
实例化控制器
//
如果存在和类名相同的xib ,
通过 alloc init
方法,内部会优先加载xib
TestViewController
*controller = [[TestViewController alloc] init];
// 3.
设置window的根控制器
self.window.rootViewController
= controller;
// 4.
让window成为主窗口并可见
[self.window
makeKeyAndVisible];
注意:我们使用storyboard创建控制器的时候,其实storyboard帮我们自动加载了UIWindow,所以当我们纯代码创建控制器的时候,需要自己实例化UIWindow
相关文章推荐
- 实例讲解iOS中的UIPageViewController翻页视图控制器
- iOS9 系统分享调用之UIActivityViewController
- iOS开发中ViewController的页面跳转和弹出模态
- ExtJS中viewController、viewModel、View、Model的关联展示
- viewController流程详解
- 从任意ViewController切换到rootViewController
- 这篇为ViewController的制作
- iOS Storyboards Container View Controller整理笔记
- iOS5中UIViewController的新方法
- iOS的init、loadView, viewDidLoad, viewDidUnload, dealloc的关系
- iOS 改变storyboard默认ViewController大小
- ViewController 生命周期-iOS初学
- ViewController生命周期详解
- 单ViewController多View下实现简易切换Animation
- 将viewControllerA加载到viewControllerB中,同时将A设置为B中tableView的header
- ViewController (视图控制器)
- 如何从项目中移除storyboards
- iOS 【UIKit-在程序运行时隐藏状态栏】
- ViewController 视图切换效果
- ios-开发点滴 在ViewController里面建立UITabBarController