Tôi có một lớp học, FooView
, đó là một lớp con của UIView
, và có xem được nạp từ một ngòi bút, một cái gì đó như:subclass của một lớp con UIView nạp từ một ngòi
+ (instancetype)viewFromNib
{
NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"FooView" owner:self options:nil];
return [xib objectAtIndex:0];
}
Các nib chính nó có Tuỳ chỉnh của nó Lớp học được đặt thành FooView
trong Trình kiểm tra danh tính.
này được khởi tạo như:
FooView *view = [FooView viewFromNib];
này hoạt động như bạn mong muốn. Tuy nhiên, khi FooView được bản thân subclassed như FooSubclassView, và khởi tạo như:
FooSubclassView *view = [FooSubclassView viewFromNib];
view
vẫn là loại FooView
, không FooSubclassView
.
Swizzling lớp với object_setClass
không sửa chữa thực tế là các đối tượng cơ bản là một thể hiện của FooView
, và do đó phương pháp kêu gọi dụ lớp con sẽ là những của lớp cha (FooView
), không FooSubclassView
.
Làm thế nào tôi có thể sửa lỗi này để các lớp con thuộc loại chính xác, mà không phải tạo một ngòi mới cho mỗi phân lớp, hoặc phải thực hiện lại viewFromNib
trong mỗi phân lớp?
Tôi không chính xác nhận được điều này. Nếu chế độ xem là Chủ sở hữu tệp thì bạn cần một lớp khác sẽ là "canvas" trực quan mà bạn vẽ bằng cách sử dụng IB, phải không? Xin lỗi nếu câu hỏi này không rõ ràng, nhưng tôi đã có một NIB chỉ với một lớp con NSView trong đó. Cảm ơn bạn! –