1

我创建一个XIB.

我创建了这个名为的类MyCustomView并将其分配给XIB's File Owner。

- (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不运行。

什么都没发生。

有任何想法吗?

4

1 回答 1

1

正如我在其他地方所写的, “文件的所有者”并不是档案中的真实对象。这是一个占位符。当您打开笔尖的包装时,会使用一个预先存在的对象。

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

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

于 2017-09-05T21:47:56.110 回答