【问题标题】:Can't set position of modal window无法设置模态窗口的位置
【发布时间】:2019-05-15 06:34:11
【问题描述】:

我有一个想要显示为模式窗口的窗口 (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]

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

什么给了?

【问题讨论】:

  • documentation 中他们说“如果它不可见,则窗口使用其center 方法中的值在屏幕上居中”
  • 听起来像是 RTFD 的案例...... :) 我错过了那个小花絮。我现在创建了一个自定义窗口类,在其中我覆盖了center 方法,这似乎成功地抑制了不希望的行为!
  • 你能分享一些相关的代码吗?

标签: cocoa osx-yosemite


【解决方案1】:

我已经解决了这个问题

1- 创建一个新的 NSWindow 子类,覆盖 center 方法,您只需将新窗口的框架定位在您想要的任何 NSPoint:

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))
    }
}

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

3- 实例化窗口控制器并设置子类窗口的属性

 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 方法来使窗口成为模态窗口。不要忘记在 windowWillClose 方法中包含 NSApp.stopModal(),该方法在视图控制器中的 NSWindowDelegate 中可用

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多