Tôi luôn sử dụng phương thức loadNibNamed để tải chế độ xem tùy chỉnh vào bộ điều khiển chế độ xem, nhưng giờ tôi đang cố tránh gọi phương thức đó bên ngoài chế độ xem tùy chỉnh hơn tái sử dụng để nếu một người khác sử dụng giao diện tùy chỉnh của tôi anh sẽ chỉ cần phải nhanh chóng quan điểm mà không loadFromNib, ví dụ:Tuỳ chỉnh UIView với Nib nhanh chóng mà không sử dụng loadFromNib trong bộ điều khiển xem
var myView: MyView = MyView()
Và thêm quan điểm này để xem bộ điều khiển quan điểm của sẽ là đủ, quan điểm tùy chỉnh sẽ được tải nib bên trong chính nó. Tôi đang cố gắng để làm điều đó trong Swift, trong ObjC tôi đã tìm thấy mã như một trong những câu trả lời này: UIView and initWithFrame and a NIB file. How can i get the NIB file loaded? Nhưng nhanh chóng tôi không thể sử dụng init được sử dụng trong câu trả lời:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code.
//
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.view];
}
return self;
}
tôi có phương pháp này và nó kết thúc với một vòng lặp vô hạn:
override init(frame: CGRect) {
super.init(frame: frame)
self.loadFromNibNamed("MyView")
}
tôi cũng đã thử thêm một cái nhìn bên trong MyView như một IBOutlet như câu trả lời khác nói và sử dụng tất cả các tệp kê:
@IBOutlet var view: UIView!
override init() {
super.init()
NSBundle.mainBundle().loadNibNamed("MediaPlayerView", owner: self, options: nil)
self.addSubview(self.view)
}
override init(frame: CGRect) {
super.init(frame: frame)
NSBundle.mainBundle().loadNibNamed("MediaPlayerView", owner: self, options: nil)
self.addSubview(self.view)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
NSBundle.mainBundle().loadNibNamed("MediaPlayerView", owner: self, options: nil)
self.addSubview(self.view)
}
Nhưng vẫn có lỗi của vòng lặp vô hạn.
Tôi không thể tìm được giải pháp tốt cho điều đó và điều đó khiến tôi phát điên! Ai đó có thể giúp tôi? Cảm ơn!
Liệu NIB của bạn có chứa một cái nhìn của lớp 'MyView' hoặc 'MediaPlayerView', resp.? Đây có thể là lý do của vòng lặp vô hạn, và tôi đoán 'init (coder:) 'là nguyên nhân. – clemens