Xib与StoryBoard使用

2016-08-17  本文已影响0人  TimLau

自定义控件之xib方式

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加载完毕的操作,就在这个方法中操作(建议在这个方法中写初始化代码)


















上一篇 下一篇

猜你喜欢

热点阅读