无法设置NSWindow的位置

时间:2010-09-29 23:27:56

标签: objective-c nswindow nswindowcontroller

我有一个扩展NSWindowController的类,我试图定位它控制的窗口。该窗口正确显示所有预期的内容和函数,但是当我尝试在initWithWindowNibName方法中将其起始位置放在屏幕上时,位置不会改变。这是代码:

NSPoint p = NSMakePoint(100, 50);
[[self window] setFrameTopLeftPoint:p];

这似乎很直接,我不确定问题是什么。

感谢任何想法。

(发现问题。我没有将窗口连接到IB中的Class。)

2 个答案:

答案 0 :(得分:3)

Wevah有正确的想法,但我会尝试稍微扩展一下。

如果您尝试将此行添加到initWithWindowNibName:方法:

NSLog(@"window == %@", [self window]);

您可能会看到以下输出到控制台:

window == (null)

换句话说,窗口仍然是nil,因为init*方法在对象的生命周期中如此早,以至于许多IBOutlet或用户界面项目都没有被“钩住” “尚未。”

nil发送消息完全没问题:它被忽略了。所以,基本上你尝试定位窗口没有任何效果,因为它基本上等于[nil doSomething];

然后,关键是在控制器对象的生命周期中执行窗口的定位,其中IBOutlet和其他用户界面对象被正确连接。正如Wevah所提到的那样,正确连接事物的一种方法是

- (void)awakeFromNib;

或在NSWindowController的情况下,也是以下一个:

- (void)windowDidLoad;

希望这会有所帮助......

答案 1 :(得分:1)

尝试将该代码放入awakeFromNib