目录
使用xib文件构建界面
1、将ViewController.h、ViewController.m、Main.storyboard三个文件delete掉
2、Deployment Info的Main Interface置空,也就是去掉Main
3、添加试图控制器
4、修改AppDelegate文件,将xib文件添加到window中
5、运行结果
6、 错误“This Class is not Key Value Coding-Compliant for the Key”
目前做IOS开发iphone应用,xcode默认布局使用故事板来构建界面,老版本的工程中则使用的XIB文件来构建,XIB是在NIB的基础上发展而来,最初苹果公司采用的是NIB来构建界面,后来文件格式采用了xml,便更名为XIB。
默认在创建工程的时候采用的故事板Main.storyboard作为应用界面,更换成xib文件构建界面需要经过四个步骤,下面是oc版本的,
注意:Main Interface置空,什么都不要写,重要的事情再说一遍:什么都不要写
如下图
工具栏 File > New > File 弹出下图,选择:Cocoa Touch Class
然后创建RootViewController如下图,一定有记得勾选XIB file
然后生成如下目录的文件
在XIB文件中加入几个控件,同故事板一样,拖拽进来即可
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//最后一步将创建xib文件绑定到window界面上
self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = [[UIViewController alloc]initWithNibName:@"RootViewController" bundle:nil];
[self.window makeKeyAndVisible];
return YES;
}
@end
运行如果发现无法显示界面,检查一下步骤2和步骤4是否正确
注意上面在在布局好之后,如果不连接IBOutlet属性变量还好,一旦增加就会报错:“This Class is not Key Value Coding-Compliant for the Key”
self.window.rootViewController = [[UIViewController alloc]initWithNibName:@"RootViewController" bundle:nil];
千万注意这样写会有个错误,可能还还很不好找,原因是不能像上面那这样写,应该写为:
self.window.rootViewController = [[RootViewController alloc]initWithNibName:@"RootViewController" bundle:nil];
原因是可能在别处看的是UIViewController,但是这个UIViewController是系统的,确实能直接用但是直接用了之后就会出现上爱你错误。
并且在头部加上:#import "RootViewController.h"
#import "AppDelegate.h"
#import "RootViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
CGRect screen = [[UIScreen mainScreen] bounds];
self.window = [[UIWindow alloc]initWithFrame:screen];
self.window.rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
[self.window makeKeyAndVisible];
return YES;
}
@end