无法设置模态窗口的位置

时间:2015-05-11 04:16:41

标签: cocoa osx-yosemite

我有一个窗口要显示为模态窗口(OS X 10.10)。我正在为窗口加载NIB,并且能够成功设置标题,然后显示窗口。但无论我做什么试图影响窗口位置都不起作用。

这有效(NSWindowController子类的一部分):

[[self window] setTitle:title];
[[NSApplication sharedApplication] runModalForWindow:[self window]];

以下是设置标题后我试图影响位置的方法:

[[self window] setFrameOrigin: NSMakePoint(200.0, 200.0) ];
[[self window] setFrameTopLeftPoint: NSMakePoint(200.0, 200.0) ];
[[self window] setFrame: NSMakeRect(200, 300, [[self window] frame].size.width, [[self window] frame].size.height) display:YES];

(我也尝试过其他值 - 仅用于测试,但没有。)

我甚至可以查询

[[self window] frame]

它假装接受新值,但窗口固执地一直显示在同一位置。

是什么给出了?

1 个答案:

答案 0 :(得分:0)

我已经解决了

1-创建一个新的NSWindow子类,重写center方法,在该子类中,您只需将新窗口的框架放置在所需的任何NSPoint上:

...

2-在Storyboard中将WindowController的窗口类设置为新的NSWindow子类。

3-禁用窗口控制器并设置子类窗口的属性

class CenteredInParentWindow: NSWindow {

    var parentMinX : CGFloat?
    var parentMinY : CGFloat?

    override func center() {
        guard let parentMinX = parentMinX, let parentMinY = parentMinY else {
            super.center()
            return
        }
        self.setFrameOrigin(NSPoint(x: parentMinX, y: parentMinY))
    }
}

您可能需要 let myWindowController = self.storyboard!.instantiateController(withIdentifier: "windowID") as! PlansWindowController if let customWindow = myWindowController.window as? CenteredInParentWindow { customWindow.parentMinX = NSApplication.shared.mainWindow?.frame.minX customWindow.parentMinY = NSApplication.shared.mainWindow?.frame.minY } NSApp.runModal(for: myWindowController.window!) } 方法才能使窗口成为模态窗口。不要忘记在runModal的{​​{1}}方法中包含NSApp.stopModal(),在您的View控制器中