InitwithCoder从未要求基于可可NSVIEW的类



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

我运行该应用程序。MyCustomViewinitWithCoder不运行。initWithFrame不运行。awakeFromNib不运行。

什么也没发生。

有什么想法?

"文件的所有者"正如我在其他地方写的那样,不是存档中的真实对象。这是一个占位符。解开笔尖时,使用了一个预先存在的对象。

看起来您应该只是将自定义视图的实例放入笔尖中。不要使其文件的所有者,只需将视图从对象调色板中拖出,然后在身份检查员(右窗格,顶部;按⌘-⌥-3)中更改其类。也在笔尖中构建子视图。

然后让您的NSBundle为您加载笔尖。您的自定义视图将获得initWithCoder:awakeFromNib,并且您不必通过层次结构来查找特定子视图。

相关内容

  • 没有找到相关文章

最新更新