在显示之前设置NSWindow的位置

时间:2010-05-22 19:42:54

标签: cocoa

现在我正在设置一个即将打开的窗口的位置:

-(void) setActiveNodeDialog:(ISKNodeDialogController *)dialog
{
    if (activeNodeDialog)
        [[activeNodeDialog window] close];
    activeNodeDialog = dialog;
    if (activeNodeDialog) {
        [activeNodeDialog setMainWindowController:self];
        NSRect windowRect = [[self window] frame];
        NSRect dialogRect = [[activeNodeDialog window] frame];
        NSPoint pos;
        pos.x = windowRect.origin.x + windowRect.size.width - dialogRect.size.width - 10;
        pos.y = windowRect.origin.y + 32;
        [[activeNodeDialog window] setFrameOrigin:pos];
        [[activeNodeDialog window] makeKeyAndOrderFront:nil];
    }
}

问题在于,窗口将在显示时“跳转”。即使我在使用“makeKeyAndOrderFront”显示窗口之前设置了位置。该窗口是NSPanel *。任何想法如何解决跳跃?

在awakeFromNib中设置位置不是一个选项,因为稍后会设置主控制器。

1 个答案:

答案 0 :(得分:14)

在Interface Builder中,检查窗口时“启动时可见”?如果是这样取消选中它然后你甚至不需要这个代码[[activeNodeDialog window] close] ;.基本上如果选中它,那么当实例化xib时会自动显示窗口...这是你不想要的。