1

我已经定义了一个带有drawRect的自定义类,称为Drawing。我已经在我的 NIB 中布置了视图,以包含一个带有绘图子视图的 NSScrollView。当我启动程序时,屏幕是空白的。有趣的是,当我以编程方式为 NSScrollView 创建 documentView 时,我在滚动视图中得到了一个图像。当我在 setDocumentView 中使用 nib 的实例时,我什么也得不到。

因此,如果在 IB 中设置了绘图视图,

[_scrollViewWorkspace setDocumentView:_drawing]; //does not work.

[_scrollViewWorkspace setDocumentView:[[Drawing alloc] initWithFrame:NSMakeRect(0,0,[[_scrollViewWorkspace documentView ]bounds].size.width, [[_scrollViewWorkspace documentView] bounds ].size.height)]];

效果很好!

为什么我不能在 NIB 中静态绑定绘图对象?

4

2 回答 2

0

解决了!

当我在 Interface Builder 中布置视图时,我只是将自定义视图拖到画布中的 NSScrollView 上。我重新做了布局,以便我使用 Embed->Scroll View 并且它起作用了。

布鲁斯

于 2013-05-26T12:50:25.087 回答
0

当您将 nib 文件中的子类的自定义类设置为您的自定义类时,在运行时,将使用而不是NSView创建该类的实例。initWithCoder:initWithFrame:

Drawing您可以通过将以下方法添加到自定义视图来轻松检查是否是这种情况:

- (id)initWithCoder:(NSCoder *)coder {
   NSLog(@"[%@ %@]", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
   return [super initWithCoder:coder];
}

然后启动您的应用程序并查看是否[Drawing initWithCoder:]已登录到控制台。

如果您已在类中重写initWithFrame:Drawing进行自定义初始化(例如自动设置自定义图像),则需要将相同的代码添加到initWithCoder:方法中,以便最终得到相同的结果:

- (id)initWithCoder:(NSCoder *)coder {
   if ((self = [super initWithCoder:coder])) {
      // do custom initialization here

   }
   return self;
}
于 2013-05-26T07:48:24.877 回答