gpt4 book ai didi

cocoa - Interface Builder NSScrollView 无法与 IB 定义的 View 一起使用

转载 作者:行者123 更新时间:2023-12-03 17:22:52 24 4
gpt4 key购买 nike

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

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

[_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 中静态绑定(bind)绘图对象?

最佳答案

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

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

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

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

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

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

}
return self;
}

关于cocoa - Interface Builder NSScrollView 无法与 IB 定义的 View 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16754875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com