使用NIB文件创建UIVEW
(1)之前使用NIB来创建UIVIEW的话,一般是创建一个UIVIEW,然后再创建一个NIB文件,将其"show the identity inspector"->"custom class"更改成自己创建的那个类名,让NIB文件和.h .m文件建立起关系,然后就可以以拖线的方式对NIB文件上的控件建立属性了,
其他方法是:(其实就是通过NSBundle mainBundle是通过加载XIB文件)
//创建与使用
MyView *testView = [[[NSBundle mainBundle]loadNibNamed:@"MyView" owner:self options:nil]firstObject];
testView.myImageView.image = [UIImage imageNamed:@"animation.gif"];//支持GIF格式的,图片不会动的
testView.myImageView.image = [UIImage imageNamed:@"test"];//可以只写一个图片名字,不写后缀名也行
testView.myImageView.image = [UIImage imageNamed:@"image.jpg"];//其他格式的得写“图片名+后缀名”
testView.myLabel.text = @"测试数据";
[self.view addSubview:testView];
(2) 利用代码来创建,在initWithFrame方法里将其加到self上(但是在使用的时候遇到两个问题,第一个问题:这个类里我还涉及到向服务器请求信息,当信息被请求下来的时候,需要更新页面,但是却更新不了,最后发现,应该取到那个视图,view = [self viewWithTag:6666],更新那个上面的控件。第二个问题:添加不上去手势,即使userInteractonEnabled=YES 也不会去执行那个手势方法,很是纳闷!)- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
UIView *view = [[[NSBundle mainBundle]loadNibNamed:@"VipView" owner:self options:nil]firstObject];
view.tag = 6666;
[self addSubview:view];
}
return self;
}
(3) 创建NIB基类(一种貌似很厉害的方法哦!)
大致的思路:创建一个父类,用于加载当前对象的XIB文件,当创建子类对象时,先去执行父类里的方法,先会加载对应的XIB文件,然后再其进行属性设置。DEMO
父类
@interface GENibView : UIView
@end
#import "GENibView.h"
@implementation GENibView
- (id)initWithFrame:(CGRect)frame
{
self = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil] firstObject];
if (self) {
self.frame = frame;
}
return self;
}
@end
子类
.h
@interface VipView : GENibView
@property (copy, nonatomic) NSString *name;
@end
.m
#import "VipView.h"
@interface VipView ()
@property (strong, nonatomic) IBOutlet UILabel *nameLabel;
@end
@implementation VipView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
-(void)setName:(NSString *)name{
_nameLabel.text = name;
}
-(NSString *)name{
return _nameLabel.text;
}