我已经使用名为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中的绘图对象?
答案 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并且它有效。
布鲁斯