1.创建xib文件,--(与你实例化那个控件的名字相一致)
- 加载xib文件的实质是创建控件,包括父控件与子控件。
假如xib里面有一个shopView ,子控件是UIImage与UILable控件。
xib实现相当于代码(根据拖进去控件类型选择类方法)
if(self=[super init])(代码创建)
UIImageView *iconView= [[UIImageView alloc]init];
UILabel *laberView = [[UILabel alloc]init];
还有frame略去
2.父控件是与名字一样的那个类,加载的时候创建的是这个类型。这个类型里有模型数据属性。
- 2.1 拿到模型数据,可以用tag拿到子控件,对子控件进行给数据。
UIImageView *iconView = [(UIImageView *)[self viewWithTag:5];
- 2.2.采取IBOutlet拿到子控件 (只能连接到父控件)
@property(nonatomic,strong)IBOutlet UIImageView * iconView;
/** 名字控件 */
@property(nonatomic,strong)IBOutlet UILabel * lableView;
3.加载xib文件
shopView *yhshopview = [[[NSBundle mainBundle] loadNibNamed:@"shopView" owner:nil options:nil] lastObject];
- 3.1最好屏蔽到输入的文件名字,防止出现错误,同事之间减少沟通成本。
- 方法一写一个类方法
+(NSString *) xibName
{
return NSStringFromClass(self);
}
- 方法二直接将加载写到类方法中。
+(instancetype)shopView{
return [[[NSBundle mainBundle] loadNibNamed: NSStringFromClass(self);
owner:nil options:nil] lastObject];
}
4.为通过xib文件创建的控件初始化
- 4.1 通过可视化在右边的边框里设置,缺点设置有限。
- 4.2 一般想到用init方法例如:
-(instantype)initWithFrame:(CGRect)frame{
if(self =[super initWithFrame:frame])
{
self.backgroundColor = [UIColor redColor];
}
return self;
}
首先通过xib创建的控件是不会调用上面这个方法。
- 4.3 调用的是
-(id)initWithCode:(NSCoder*) aDecoder{//这个是创建时,会调用。有些时候有些属性还不存在,所以不靠谱。
if(self = [super initWithColor:aDecoder]){
self.scrollView.backgroudColor = [UIColor redColor];
}
return self;
}
最好调用awakeFromNib
```
- (void)awakeFromNib{
self.srollView.backgroundColor =[UIColor redColor];
}
```
网友评论