我有一个扩展NSWindowController的类,我试图定位它控制的窗口。该窗口正确显示所有预期的内容和函数,但是当我尝试在initWithWindowNibName方法中将其起始位置放在屏幕上时,位置不会改变。这是代码:
NSPoint p = NSMakePoint(100, 50);
[[self window] setFrameTopLeftPoint:p];
这似乎很直接,我不确定问题是什么。
感谢任何想法。
(发现问题。我没有将窗口连接到IB中的Class。)
答案 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
。