[iOS UI] 如何通过xib创建自定义UIView并在xib中使用

需求描述

因为我的项目正处于UI设计还没有定稿,变化的可能性较大阶段,当然要使用autolayout,所以我想要定制UIView并从xib中加载界面,而且在UIViewController的xib文件中使用前面的定制UIView,各种google,SO,多少不满足需求或者有错误,所以记录一篇。

步骤

  • 从模板创建一个Single View Application
  • 新建一个User Interface -> View,命名为ViewController.xib
  • 选择ViewController.xibFile's Owner,在identity inspector里修改Custom Class为ViewController 如图custom_name.png;在connections inspector里连接view到编辑区域xib的View上 如图link_view.png;
    [iOS UI] 如何通过xib创建自定义UIView并在xib中使用_第1张图片
    custom_name.png

    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.xibFile'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.xibView的子view,并修改新建view的名称为CustomizedView,如图subview.png

    [iOS UI] 如何通过xib创建自定义UIView并在xib中使用_第2张图片
    subview.png

  • 运行,看到效果。工程下载

你可能感兴趣的:([iOS UI] 如何通过xib创建自定义UIView并在xib中使用)