Xib与StoryBoard使用

自定义控件之xib方式

  • xib与storyboard

    • 共同点:
      • 都用来描述软件界面
      • 都用Interface Builder工具来编辑
      • 本质都是转换成代码去创建控件
    • 不同点:
      • Xib是轻量级的,用来描述局部的UI界面
      • Storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系
  • Xib的加载方式

    • 方式一:通过 mainBundel loadNibNamed 加载

NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib文件名" owner:nil options:nil];

- 方式二:通过 `UINib` `nibWithNibName` 加载

UINib *nib = [UINib nibWithNibName:@"xib文件名" bundle:nil];
NSArray *views = [nib instantiateWithOwner:nil options:nil];

- **通过 Xib 创建自定义控件步骤:**
- 新建一个继承 `UIView` 的类
- 新建一个 Xib 文件(xib的文件名最好和控件类名一样)
  - 添加子控件、设置子控件属性
  - 修改 Xib 文件的 class 为控件类名
  - 将子控件进行连线

- **UIView方法说明**
- `init` 和 `initWithFrame` 一般在使用代码创建的时候调用,调用 `init` 的时候,系统会默认调用一次 `initWithFrame` ;但调用 `initWithFrame` 不会调用 `init`;所以一般初始化自己的子控件一般都是放在 `initWithFrame`
代码

//重写-(instancetype)initWithFrame:(CGRect)frame方法
//init方法内部会自动调用-(instancetype)initWithFrame:(CGRect)frame 方法,因此建议写这个方法,用于替代-(instancetype)init 方法
-(instancetype)initWithFrame:(CGRect)frame {
if (self = [super init]) {
//这里初始化控件
}
return self;
}

- `layoutSubviews`这个方法方法专门用来布局子控件,一般在这里设置子控件的frame,当控件本身的尺寸发生改变的时候,系统会自动调用这个方法。重写此方法内一定要调用 `[super layoutSubviews]`
代码

/**
* 这个方法专门用来布局子控件,一般在这里设置子控件的frame
* 当控件本身的尺寸发生改变的时候,系统会自动调用这个方
*/
-(void)layoutSubviews {
// 一定要调用super方法
[super layoutSubviews];
//这里设置子控件的frame
}

- `initWithcoder` 使用 storyboard/xib 中加载就会调用这个方法;这个方法一般是初始化的操作
- `awakeFromNib` storyboard/xib中加载完毕的时候调用,想做一些在xib加载完毕的操作,就在这个方法中操作(建议在这个方法中写初始化代码)


















你可能感兴趣的:(Xib与StoryBoard使用)