【发布时间】:2011-11-17 13:37:14
【问题描述】:
我在 IB 中有一个 NSView,它位于应用程序窗口的上方。我有一个分配给 NSView 的 NSView (AddSource) 子类。
在 awakeFromNib 我实例化视图:
//add a new Add Source class
addSourceView = [[AddSource alloc] initWithFrame:NSMakeRect(0.0, 959.0, 307.0, 118.0)];
[[winMain contentView] addSubview:addSourceView];
在 addSourceView 的 drawRect 方法中,我在视图中添加了一个白色背景:
[[NSColor whiteColor] set];
NSRectFill(rect);
[self setNeedsDisplay:YES];//added this to see if it might solve the problem
在 winMain 的 contentView 中,我有一个 NSButton,单击它会将 addSourceView 滑到窗口上:
NSRect addSourceViewFrame = [addSourceView frame];
addSourceViewFrame.origin.y = 841.0;
[[addSourceView animator] setFrame:addSourceViewFrame];
但似乎该应用正在绘制我放置在 IB 中的 NSView 上的 IBOutlets。如果在 IB 中,我重新定位 NSView 以便在应用程序启动时它在屏幕上一切正常,则 IBOutlets 和背景颜色都在那里。
我不确定为什么会这样。我以前做过这个,没有任何问题。这次我一定要做点不一样的事。
感谢您的帮助。
*note - 在第 3 次屏幕截图中,当我说这是应用程序打开时的样子时,那是我对 NSView 的 Y 位置进行硬编码的时候。当它正常运行时,它应该以屏幕截图 1 的形式打开。
【问题讨论】:
-
你似乎很困惑..在drawRect中随机尝试-setNeedsDisplay之类的东西不是答案。你读过希勒加斯的书吗?
-
困惑,是的,但不是你想的那样。我把 setNeedsDisplay 放在那里看看会发生什么。
-
好吧,我承认 - 我很困惑。如果您在 IB 或 -awakeFromNib 中创建 AddSourceView ,您的描述尚不清楚
-
我有一个名为 AddSource 的类(NSView 的子类)。在 IB 中,我创建了一个 NSView,将其作为类添加 AddSource 并将其放置在窗口之外。在 awakeFromNib 上,我实例化了这个类,并在它的 drawRect 中用白色填充它。这发生在用户没有看到视图的情况下。当用户单击添加源按钮(+ 号)时,视图会向下滑动,用户可以填写所需的信息(屏幕截图 3)。但我得到的是屏幕帽 2。
-
这就是我添加 setNeedsDisplay 的原因,我想可能是因为我正在为视图“绘制”一种颜色,我必须重新绘制我在 IB 中放置的对象(文本字段和按钮)。编辑:我可以以编程方式添加文本字段和按钮(在 AddSource 类的 drawRect 中,它工作正常,但我宁愿不必这样做。