iOS-UIViewController创建的几种方法和UIWindow的介绍

在程序的启动过程中提到 如果没有 storyboard时:
     * 程序启动时候, 就会调用代理的application:  didFinishLaunchingWithOptions:方法
     * 在application: didFinishLaunchingWithOptions:中创建UIWindow
     * 创建和设置UIWindow的rootViewController
     * 显示窗口

也就是说:程序启动,先加载 UIWindow, UIWindow将作为容器去接收的控件;
那么 UIWindow是什么?
     UIwindow是一个特殊的UIView,在一个app 只能有一个 UIWindow keyWindow
      iOS 程序启动完毕后,创建的第一个视图控件就是 UIWindow ,接着创建 UIViewController的view 最后将 UIViewController的view 添加到 UIWindow 上,于是 UIViewController的view 就显示在屏幕上了;
     一个 iOS 程序之所以能显示到屏幕上,完全是因为它有 UIWindow。

          ps: UIViewController的属性
        @property ( null_resettable , nonatomic , strong ) UIView *view;
看一张图片:

 UIwindow的常见方法:
     - ( void )makeKeyWindow ;
          让当前 UIWindow 变成 keyWindow (主窗口)
     - ( void )makeKeyAndVisible;
          让当前 UIWindow 变成 keyWindow ,并显示出来

          添加 UIView UIWindow
     - ( void )addSubview:( UIView *)view;
          直接将 view 添加到 UIWindow 中,但并不会理会 view 对应的 UI ViewController
     @property ( nonatomic , retain ) UIViewController * rootViewController ;
          自动将 rootViewController view 添加到 UIWindow ,负责管理 rootViewController 的生命周期
 
    总结:在没有 storyboard时,首先需要创建 UIWindow,再创建 UIViewController;


UIViewController的创建方式一:代码创建
创建一个类 YSCViewController继承自 ViewController,将头文件( #import “YSCViewController.h” )导入 AppDelegate.m

代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    //实例化window
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    //创建控制器并使之成为root控制器
    YSCViewController *vc = [[YSCViewController alloc] init];
    self.window.rootViewController = vc;

    //设置window为主window和可见
    [self.window makeKeyAndVisible];
    return YES;
}

UIViewController的创建方式二:Xib方式


1.指定xib的名称:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    //实例化window
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    //创建控制器并使之成为root控制器
    YSCViewController *vc = [[YSCViewController alloc] initWithNibName:@"YSCViewController" bundle:nil];
    self.window.rootViewController = vc;

    //设置window为主window和可见
    [self.window makeKeyAndVisible];
    return YES;
}

2.不指定xib的名称时:在Xcode7.1中,默认优先与UIViewController类同名的Xib(即YSCViewController),如果同名的不存在,再去调用去掉Controller的Xib(即 YSCView );

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    //实例化window
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    //创建控制器并使之成为root控制器
    YSCViewController *vc = [[YSCViewController alloc] init];
    self.window.rootViewController = vc;

    //设置window为主window和可见
    [self.window makeKeyAndVisible];
    return YES;
}

用xib创建时的注意点:(如果创建类时,同时创建Xib则无需关注)





 把该view连线设为主文件

UIViewController的创建方式三:storyboard方式

创建YSCStoryboard.storyboard,并创建两个UIViewController,并将在storyboard 里面Class 要指向要对应的UIViewController,我使用工程中已经存在的类默认的ViewController
1.通过初始化“初始控制器”(storyboard中箭头所指的控制器)来导入


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    //实例化window
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    //导入加载storyboard并使之成为root控制器
    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"YSCStoryboard" bundle:nil];
    ViewController *vc = sb.instantiateInitialViewController;
    self.window.rootViewController = vc;

    //设置window为主window和可见
    [self.window makeKeyAndVisible];
    return YES;
}

2. 通过一个标识初始化对应的控制器来导入



    //导入加载storyboard并使之成为root控制器
    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"YSCStoryboard" bundle:nil];
    ViewController *vc = [sb instantiateViewControllerWithIdentifier:@"edit"];
    self.window.rootViewController = vc;


 

转载于:https://www.cnblogs.com/yangsanchao/p/5014470.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值