i创建XIB
。
我创建此类名为MyCustomView
并将其分配给XIB
的文件所有者。
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self) [self load];
return self;
}
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) [self load];
return self;
}
- (void)load {
NSArray* topLevelObjects;
[[NSBundle mainBundle] loadNibNamed:@"MyCustomView"
owner:self
topLevelObjects:&topLevelObjects];
NSView* view;
for (id aView in topLevelObjects) {
if ([umaVista isKindOfClass:[NSView class]]) {
view = umaVista;
break;
}
}
[self addSubview:view];
view.frame = self.bounds;
}
我在主应用程序上创建NSView
。
我将该视图更改为 MyCustomView
。
我运行该应用程序。MyCustomView
的initWithCoder
不运行。initWithFrame
不运行。awakeFromNib
不运行。
什么也没发生。
有什么想法?
"文件的所有者"正如我在其他地方写的那样,不是存档中的真实对象。这是一个占位符。解开笔尖时,使用了一个预先存在的对象。
看起来您应该只是将自定义视图的实例放入笔尖中。不要使其文件的所有者,只需将视图从对象调色板中拖出,然后在身份检查员(右窗格,顶部;按⌘-⌥-3)中更改其类。也在笔尖中构建子视图。
然后让您的NSBundle
为您加载笔尖。您的自定义视图将获得initWithCoder:
和awakeFromNib
,并且您不必通过层次结构来查找特定子视图。