需求描述
因为我的项目正处于UI设计还没有定稿,变化的可能性较大阶段,当然要使用autolayout,所以我想要定制UIView并从xib中加载界面,而且在UIViewController的xib文件中使用前面的定制UIView,各种google,SO,多少不满足需求或者有错误,所以记录一篇。
步骤
- 从模板创建一个
Single View Application
- 新建一个
User Interface
->View
,命名为ViewController.xib
- 选择
ViewController.xib
的File's Owner
,在identity inspector里修改Custom Class为ViewController
如图custom_name.png;在connections inspector里连接view到编辑区域xib的View上 如图link_view.png;
- 修改
AppDelegate.m
里的代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
_window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
_window.rootViewController = [[UIViewController alloc]initWithNibName:@"ViewController" bundle:nil];
[_window makeKeyAndVisible];
return YES;
}
运行,确认程序已经加载你自定义的xib而不是走默认的storyboard
- 新建UIView的子类
CustomizedView
并且为它创建一个View为CustomizedView.xib
- 选择
CustomizedView.xib
的File's Owner
[这里注意,一定是File's Owner,而不是View本身],把Customer Class指定为CustomizedView,类似图custom_name.png。 - 修改
CustomizedView.m
文件如下:
#import "CustomizedView.h"
@implementation CustomizedView
-(instancetype)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
UIView *view = [[[NSBundle mainBundle]loadNibNamed:@"CustomizedView" owner:self options:nil]objectAtIndex:0];
[self addSubview:view];
}
return self;
}
@end
-
选择
ViewController.xib
,从右下角object libary里拖动一个UIView到ViewController.xib
View的子view,并修改新建view的名称为CustomizedView
,如图subview.png
运行,看到效果。工程下载