Interface Builder NSScrollView无法使用IB定义的View

时间:2013-05-25 23:34:50

标签: cocoa

我已经使用名为Drawing的drawRect定义了一个自定义类。我在我的NIB中布局了包含带有Drawing子视图的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中的绘图对象?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

解决!

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

布鲁斯