UIWindow - 04加载Xib的控制器View

  • 我想要使用Xib 的控制器View,来自定义窗口 ?
    • 自定义UIViewController
      @interface LoginViewController : UIViewController
    • 示例代码 :
        -- 创建窗口
        self.window = [[UIWindow alloc]init];
        -- 根据"名称"创建"UIViewController"
        LoginViewController *loginCont = [[LoginViewController alloc]initWithNibName:@"Temp" bundle:nil];
        -- 为窗口设置根控制器
        self.window.rootViewController = loginCont;    
        -- 显示窗口
        [self.window makeKeyAndVisible];
        return YES;
      
    • Xib 文件里需要做这些操作 :
      • 告诉Xib描述哪一个控制器的View。(绑定类)
      • 告诉控制器,Xib当中哪一个View去描述控制器的View.(连线)

        因为Xib文件中可能有多个View, 所以需要指定具体哪个View是控制器View。

  • 创建自定义的UIViewController, [[LoginViewController alloc] init];
    • init方法默认会调用initWithNibName:
      [[LoginViewController alloc] initWithNibName:nil bundle:nil];
      -- 通过打印重写"- initWithNibName 方法",可以看出,
         虽然使用"[[LoginViewController alloc] init]",但是调用的是"- initWithNibName 方法"
      
      -(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
      NSLog(@"%s",__func__);
      NSLog(@"nibName = %@,bundle = %@",nibNameOrNil,nibNameOrNil);
      return [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
      }
      
      打印结果:
        -[LoginViewController initWithNibName:bundle:]
        nibName = (null),bundle = (null)
      
    • namenil
      • 先去项目中看看,有没有跟自定义类的名称相同的Xib,有则去加载.
      • 没有,则去看看,有没有自定义类的名称减去Controller的名称, 有则加载。
      • 还没有,则不使用Xib 文件控制器的view。创建一个空白View。

  • 创建自定义ViewController的同时,创建对应的Xib文件
    • 这种方式创建的Xib 文件绑定好类,且连接好View

你可能感兴趣的:(UIWindow - 04加载Xib的控制器View)