gpt4 book ai didi

cocoa - 无法设置模态窗口的位置

转载 作者:行者123 更新时间:2023-12-03 16:21:56 24 4
gpt4 key购买 nike

我有一个窗口想要显示为模态窗口 (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-创建一个新的 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-实例化窗口 Controller 并设置子类窗口的属性

 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(),该方法可在 View Controller 的 NSWindowDelegate 中使用

关于cocoa - 无法设置模态窗口的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30159591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com