- 我想要使用
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。
- 告诉Xib描述哪一个控制器的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)
- 当
name
为nil
时- 先去项目中看看,有没有跟自定义类的名称相同的
Xib
,有则去加载. - 没有,则去看看,有没有自定义类的名称减去
Controller
的名称, 有则加载。 - 还没有,则不使用
Xib 文件
控制器的view。创建一个空白View。
- 先去项目中看看,有没有跟自定义类的名称相同的
-
- 创建自定义
ViewController
的同时,创建对应的Xib文件
。
- 这种方式创建的
Xib 文件
会绑定好类,且连接好View。
- 这种方式创建的