本次博客是一篇总结性质的博客,总结的是各种创建控制器的方式以及一些需要注意的操作。

1、通过storyboard创建控制器

 正如我上一篇博客中所说,当 Main Interface 没有选定的时候,我们一般只能通过代码来创建一个 UIWindow,不再使用系统创建好的 Main.storyboard。

 通过 storyboard 创建控制器也是在 Main Interface 没有选定的时候,但是我们还使用系统创建好的 Main.storyboard,通过不同的方法来创建窗口的根控制器。

  • 第一步:在 AppDelegate.m 文件的 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中先初始化一个 UIWindow 对象,代码如下:
    // 创建窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  • 第二步:创建一个 UIStoryboard 对象并将其初始化为 Main.storyboard

  初始化方法:

// 参数1:storyboard文件名,不需要带后缀
// 参数2:置为nil时表示[NSBundle mainBundle]
+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(nullable NSBundle *)storyboardBundleOrNil;

  实例代码:

    // 加载storyboard
// storyboard文件名,不需要带后缀,初始化为 Main.storyboard,name就是Main
// nil: [NSBundle mainBundle]
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
  • 第三步:通过storyboard创建控制器

  ① 指定箭头指向的控制器为窗口的根控制器

  方法:

// 加载箭头指向的控制器
- (nullable __kindof UIViewController *)instantiateInitialViewController;

  实例代码:

    // 通过storyboard创建控制器
// instantiateInitialViewController:加载箭头指向的控制器
UIViewController *vc = [storyboard instantiateInitialViewController];

  实例图:

  如上图:我们将粉色背景的控制器设置为默认 Main.storyboard 的控制器,当我们使用上述代码时,程序运行的效果是:如下图的一个粉色窗口

  ② 通过 Storyboard ID 来创建根控制器

  方法:

// 参数为:Storyboard ID 的字符串
- (__kindof UIViewController *)instantiateViewControllerWithIdentifier:(NSString *)identifier;

  实例代码:

// 通过 Storyboard ID 创建控制器
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"green"];

  正如 ① 中所示的图,我们将绿色背景的控制器的 Storyboard ID 置为 "green",但是Main.storyboard 的默认控制器仍然为粉色背景的控制器,使用上述实例代码,运行结果为如下图的一个绿色窗口

  具体如何设置视图控制器为 UIWindow 对象的根视图控制器以及将 UIWindow 对象作为主窗口并可见,请参考上一篇博客。

2、通过xib创建控制器

 通过 xib 创建控制器也是在 Main Interface 没有选定的时候,自己在 AppDelegate.m 文件中对应的方法中先初始化一个 UIWindow 对象。

 创建xib的方法:

  ① 在创建一个视图控制器的类的时候,将 Also create XIB file 选中之后,就会创建出来一个和控制器类对应的xib,如下图:

    这种方法创建的xib的名字与所对应的类名相同。

  ② 创建一个名字可以自定义的 xib

  创建后的设置:(具体如下图)

   (1)选择文件所有者选项

   (2)绑定控制器

   (3)绑定xib视图

  通过xib创建根控制器的方法是一个控制器的初始化方法,实例代码:

    // 通过xib创建控制器
ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

  加载xib的特殊写法:

    // 特殊写法1:
UIViewController *vc = [[ViewController alloc] initWithNibName:nil bundle:nil];
// 特殊写法2:
UIViewController *vc = [[ViewController alloc] init];

  以上 xib 的特殊写法加载 xib View 视图的底层实现:

   如果描述控制器 View 的 xib 跟控制器的类名相同,就会去加载

   只有控制器的 init 方法底层会调用 initWithNibName:bundle:

   只要通过 initWithNibName:bundle: 初始化控制器,并且 nibName 为 nil ,就会执行以下几步:

   (1)先寻找有没有跟控制器类名同名但是不带Controller的xib,如果有就会去加载(XMGView.xib)

   (2)如果没有就寻找有没有跟控制器类名同名的xib,如果有就会去加载(XMGViewController.xib)

   (3)如果都没有找到,创建空的view,

最新文章

  1. Hive的三种安装方式(内嵌模式,本地模式远程模式)
  2. BZOJ 3884 欧拉定理 无穷幂取模
  3. IIS7下ajax报未定义错误
  4. 2、SIP
  5. Bootstrap学习笔记系列6-----Bootstrap文本显示
  6. SCRIPT1010: 缺少标识符 常见原因
  7. Sqli-labs less 64
  8. DevExpress 14.2.3源码编译 z
  9. 字体圆润属性的使用-webkit-font-smoothing: antialiased
  10. HTTP请求的TCP瓶颈分析
  11. (NO.00003)iOS游戏简单的机器人投射游戏成形记(一)
  12. js 回文判断
  13. .NET Core 跨平台发布Linux和OSX
  14. Mvc校验用户没有登录就跳转的实现
  15. 【CentOS】JDK的安装
  16. maven依赖查找方法
  17. adg的数据传输应用三大模式转换
  18. mysql 忘记密码解决方案
  19. ios7下UISearchBar UITextField 光标不出现的问题
  20. Ubuntu18.04下的音频录制和编辑软件Ardour及QjackCtl(jackd gui)

热门文章

  1. 11月14日用AJAX、PHP、SESSION做购物车
  2. ubuntu 系统使用
  3. oracle中时间处理
  4. 2015.4.23 贪吃蛇、canvas动画,各种上传工具,url信息匹配以及最全前端面试题等
  5. Bash 中 SHLVL 变量为 1000 的时候
  6. MySQL 关联表批量修改(数据同步)
  7. 如何使用Service的Context弹出Dialog对话框,即全局性对话框
  8. 【HNOI2008】Cards BZOJ 1004
  9. getRealPath("/")弃用
  10. 【GoLang】golang 的精髓--流水线,对现实世界的完美模拟