自定义xib文件相关

  • Xib和storyboard对比

    • 共同点:
      都用来描述软件界面
      都用Interface Builder工具来编辑
      本质都是转换成代码去创建控件

    • 不同点
      Xib是轻量级的,用来描述局部的UI界面
      Storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系

  • 同是xib为何后缀不同

    • Test.xib –编译后–> Test.nib
  • 加载xib文件方法

  • 方式1

    NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"Test" owner:nil options:nil]; [self.view addSubview:objs[1]];
  • 方式2
  //一个UINib对象就代表一个xib文件, NSBundle mainBundle是指获取主程序包路径(相对于自定义程序包,自定义方法:文件后缀改为.bundle即可)
    UINib *nib = [UINib nibWithNibName:@"Test" bundle:[NSBundle mainBundle]];
//一般情况下,bundle参数传nil,默认就是
mainBundle
    UINib *nib = [UINib nibWithNibName:@"Test" bundle:nil];
    NSArray *objs = [nib instantiateWithOwner:nil options:nil];
    [self.view addSubview:[objs lastObject]];
  • 创建自定义xib文件步骤

    • 新建自定义控件类
    • 新建xib文件(文件名建议和view的类名一致)
    • 修改xib中view的类名
    • 封装xib加载过程(把上述加载过程之一以类方法或构造方法的形式封装到自定义控件类中)
    • 增加模型属性,在模型属性set方法中设置数据到子控件上

    注意点

  • 一个控件有2种创建方式

    • 通过代码创建
      初始化时一定会调用initWithFrame:方法
  • 通过xib\storyboard创建

    • 初始化时不会调用initWithFrame:方法,只会调用initWithCoder:方法
    • 初始化完毕后会调用awakeFromNib方法
  • 有时候希望在控件初始化时做一些初始化操作,比如添加子控件、设置基本属性
    这时需要根据控件的创建方式,来选择在initWithFrame:、initWithCoder:、awakeFromNib的哪个方法中操作

你可能感兴趣的:(UI,控件)