【问题标题】:Programmatically hide and close the window of current NSViewController以编程方式隐藏和关闭当前 NSViewController 的窗口
【发布时间】:2020-03-06 14:33:27
【问题描述】:

我想在func viewDidLoad() 中隐藏/关闭我的主应用程序窗口,并且仅在某些事件需要时显示/取消隐藏主窗口。

我尝试了self.view.window?.close(),但这留下了一个白色的窗口。我也尝试了NSApp.hide(nil),但我无法使用NSApp.unhide(nil) 取消隐藏。下面是一些示例代码:

override func viewDidLoad() {
   super.viewDidLoad()
   // Do any additional setup after loading the view.
   NSApp.hide(nil)
   runTest()
}

func runTest () {
   let check = false

   if check == false {
      NSApp.unhide(nil)
   }
}

【问题讨论】:

  • 如果您希望窗口默认不可见,请取消选中 IB 中的“启动时可见”。
  • window.setIsVisible
  • 感谢 El Tomato 的建议,但仍然无效。必须有一个简单的解决方案:启动应用程序隐藏并在不完全杀死窗口的情况下发生某些事情时取消隐藏。

标签: swift macos cocoa


【解决方案1】:

来自NSWindow documentation

func orderOut(_ sender: Any?)

从屏幕列表中删除窗口,隐藏窗口。

func makeKeyAndOrderFront(_ sender: Any?)

将窗口移动到屏幕列表的前面,在其级别内,并使其成为关键窗口;也就是说,它显示了窗口。

HideClose 是两个不同的东西:

如果窗口是关键窗口或主窗口,则紧随其后的窗口对象成为关键窗口或主窗口。调用orderOut(_:) 会导致窗口从屏幕上移除,但不会导致它被释放。有关何时释放窗口的信息,请参阅close() 方法。在子窗口上调用orderOut(_:) 会导致该窗口在被移除之前从其父窗口中移除。

隐藏应用程序 (NSApp.hide(nil) 是另一回事:它

隐藏所有接收者的窗口,并激活下一个应用程序。

【讨论】:

  • 我读过这个,但我不知道如何使用它。能否提供一些示例代码?
  • 只需调用主窗口上的方法,例如self.view.window?.makeKeyAndOrderFront(nil)
  • 我在func viewDidLoad() 中尝试了self.view.window?.orderOut(nil)。知道为什么这不起作用吗?
  • 试试orderOut(self)
  • override func viewDidLoad() { super.viewDidLoad(); self.view.window?.orderOut(self);} 也不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2016-02-09
相关资源
最近更新 更多