Tôi có một UIButton lớp con rằng tải một Nib:Cách sử dụng UIButton tùy chỉnh với Trình tạo giao diện?
@implementation BlaButtonVC
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSArray *subViews = [[NSBundle mainBundle] loadNibNamed:@"BlaButton" owner:self options:nil];
[self addSubview:subViews[0]];
}
return self;
}
@end
Và tôi có thể thêm nút này cho một người xem, như thế này:
// ViewController.m
BlaButtonVC *button = [[BlaButtonVC alloc] initWithFrame:CGRectMake(10, 10, 280, 44)];
button.titleXLabel.text = @"Nyuff";
button.descLabel.text = @"Kukk";
[self.view addSubview:button];
Vấn đề của tôi là tôi không biết làm thế nào để làm nó từ Interface Bulder, cách sử dụng lớp con UIButton này thay cho lớp con bình thường.
Đã thay đổi Loại nút thành Tùy chỉnh và Lớp tùy chỉnh thành BlaButtonVC, nhưng không đủ. Nó sẽ gọi BlaButtonVC initWithFrame, nhưng nút sẽ không xuất hiện hoặc trong Trình tạo giao diện, cũng như trong Trình mô phỏng.
Tôi đã bỏ lỡ điều gì?
Ở đây bạn có thể tìm thấy đầy đủ các mẫu:
https://www.dropbox.com/s/ioucpb6jn6nr0hs/blabla1.zip
Có, nó gọi '-initWithCoder:', nhưng bạn không nên ghi đè lên. Thay vào đó, bạn nên ghi đè '-awakeFromNib', vì tại thời điểm đó mọi thứ được thiết lập. (Đừng nghĩ đến việc gọi hai cái này một mình.) – Tricertops
Không có gì sai khi ghi đè cả 'initWithCoder:' và 'awakeFromNib'. Nó phụ thuộc vào cách anh ta muốn nó được thiết lập. – Martol1ni
Trong hầu hết các trường hợp (nếu không phải tất cả) '-awakeFromNib' là tốt hơn để ghi đè lên. Xem tài liệu cho ['- [NSObject (UINibLoadingAdditions) awakeFromNib]'] (https://developer.apple.com/library/ios/#documentation/UIKit/Reference/NSObject_UIKitAdditions/Introduction/Introduction.html). – Tricertops