UIView子类与使用NIB的委托

我想使用笔尖子类UIView。 使用下面的代码:

- (void)awakeFromNib { [super awakeFromNib]; NSArray *v = [[NSBundle mainBundle] loadNibNamed:@"Qus_Scale1to7View" owner:self options:nil]; [self addSubview:[v objectAtIndex:0]]; } - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { NSArray *v = [[NSBundle mainBundle] loadNibNamed:@"Qus_Scale1to7View" owner:self options:nil]; [self addSubview:[v objectAtIndex:0]]; } return self; } 

这会正确创build对象并且也会显示视图,并且当对象从其笔尖加载时,委托立即变为空,并忽略为其分配值的任何尝试。

谁能知道这是为什么?

提前致谢。

它不会工作重复使用相同的xib多个视图控制器。 如果你想重用这个视图,使一个类从UIViewinheritance,并在那里添加代码。

 #import "SomeProtocol.h" @interface MyCustomView : UIView { IBOutlet UIView *headerView; IBOutlet UIView *footerView; IBOutlet UIButton *updateBtn; } @property (nonatomic, assign) id<SomeProtocol> delegate; @end ............ @implementation BCFirmwareView @synthesize delegate = _delegate; + (id)viewFromNibWithName: (NSString*)name { UIView *view = nil; NSArray *views = [[NSBundle mainBundle] loadNibNamed: name owner: self options: nil]; if (views) { for (UIView *aView in views) { if ([aView isKindOfClass: NSClassFromString(name)]) view = aView; } } return view; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder: aDecoder]; if (self) { } return self; } - (id)init { self = [[MyCustomView viewFromNibWithName: @"MyCustomView"] retain]; if (self) { } return self; } - (void)dealloc { self.delegate = nil; [headerView release]; [footerView release]; [updateBtn release]; [super dealloc]; } - (void)awakeFromNib { [super awakeFromNib]; // Do any additional setup after loading the view from its nib. headerView.backgroundColor = [UIColor redColor]; footerView.backgroundColor = [UIColor greenColor]; } - (void)willMoveToSuperview:(UIView *)newSuperview { [super willMoveToSuperview: newSuperview]; if (!newSuperview) return; } - (void)didMoveToSuperview { [super didMoveToSuperview]; } - (IBAction)updateBtnPressed: (id)sender { // do some stuff } @end 

下一步是在Interface Builder中打开xib,并将您的类设置为视图的自定义类,而不是文件的响应者。 右键单击视图并进行sockets和操作连接。

更改视图的自定义类

使视图的出口和动作连接

现在,您应该能够在任何视图控制器中简单地创buildMyCustomView的实例并使用它。 如果你不忘记改变你的视图定制类到你的类,将从Interface Builder工作。

你可以用Xib创build一个自定义的UIView,并为其添加属性。 然后,将类与xib链接,并将属性与IB链接。

或者你只能使用

 NSArray *v = [[NSBundle mainBundle] loadNibNamed:@"Qus_Scale1to7View" owner:self options:nil]; UIView *view = [v objectAtIndex:0]; 

并使用viewWithTag:方法设置您的对象值。

 UILabel *label = (UILabel *)[view viewWithTag:yourTag]; 

让我知道这是否有帮助。