【问题标题】:NSViewController-Close window-Swift-StoryboardNSViewController-关闭窗口-Swift-Storyboard
【发布时间】:2016-02-09 05:57:09
【问题描述】:

单击安装在此窗口上的“继续”按钮后,我找不到关闭主窗口的正确方法。 我尝试将此按钮连接到检查器的“proceedclose”选项。 我也尝试在我的代码中插入以下行:

import Cocoa
class ViewController: NSViewController {
    ...
    @IBAction func Envoi(sender: NSButton) {    
        self.view.window!.close()
    }
}

它们都不起作用,没有任何反应,也没有报告错误。 谁能帮我解决一下?

【问题讨论】:

  • 我检查了 IB 中的“关闭时释放”选项,但还是一样。
  • 它通过在按钮操作中使用“self.view.window!.close()”来工作,但是当我添加一个新的 ViewController,并将按钮链接到它时,第一个窗口没有消失了。

标签: xcode swift cocoa


【解决方案1】:

我也有同样的问题。你的代码对我很有帮助。

然后我在 NS Lib 中检查了“VC

当您从 VC 关闭窗口时,避免情节提要变得怪异。 你可以解决这个问题,通过

self.view.window?.windowController?.close()

只是一个简短的说明。

【讨论】:

  • windowController 没有close() 方法
  • 我终于意识到这个问题与UIElement(StatusBar)的使用有关。 “self.view.window?.windowController?.close()”正在工作,但只要我将“应用程序是代理”选项更改为“是”,主窗口的框架就会消失,但仍然有一个白色矩形。
【解决方案2】:
  1. 注意每个NSViewControllerNSButton 实例。如果需要,修复对 NSViewControllerNSButton 实例的管理。
class ViewController: NSViewController {
    @IBOutlet weak var envoiButton: NSButton!
    //…
    @IBAction func doEnvoiButtonPressed(_ sender: NSButton) {    
        print(self.hash)
        print(self.envoiButton.hash)
        // … other code
    }
}
  1. 如果需要,在 Interface Builder 或代码中设置 isReleasedWhenClosed

  2. 通过NSButton@IBAction(例如Envoi)关闭窗口,并使用以下方法之一

  • self.view.window!.windowController!.close() NSWindowController close() 突然关闭,无法要求用户确认。
  • self.view.window!.close() NSWindow close() 发送willCloseNotification 通知
  • self.view.window!.performClose(nil)self.view.window!.performClose(self) NSWindow performClose(_:) 向所有窗口关闭信号发送。首先,windowShouldClose(_:) 到窗口委托(如果存在)。如果没有委托,则调用任何 NSWindow 对象 windowShouldClose(_:) 实现。如果 windowShouldClose(_:) 返回 true 或未实现,则调用 NSWindow close()performClose(_:) 是更全面、更灵活的选择)
class ViewController: NSViewController {
    @IBAction func doEnvoiButtonPressed(_ sender: NSButton) {    
        self.view.window!.performClose(nil) // or performClose(self)
    }
}

【讨论】:

    【解决方案3】:

    它通过在按钮操作中使用“self.view.window!.close()”来工作,但是当我添加一个新的 ViewController,并将按钮链接到它时,第一个窗口不再消失。

    我假设您可能忘记在新的 ViewController 中复制 @IBAction func Envoi(sender: NSButton)?这样做只会关闭您的新窗口,而不是第一个窗口。

    【讨论】:

      【解决方案4】:

      下面的项目很好地解决了这个问题。感谢大家的回答。

      https://www.appcoda.com/macos-status-bar-apps/

      【讨论】:

        【解决方案5】:

        您需要在发件人前面添加_,一切都会正常

        import Cocoa
          class ViewController: NSViewController {
        ...
            @IBAction func Envoi(_ sender: NSButton) {    
                self.view.window!.close()
            }
          }
        

        【讨论】:

          猜你喜欢
          • 2015-03-07
          • 2021-09-14
          • 1970-01-01
          • 1970-01-01
          • 2012-12-15
          • 1970-01-01
          • 1970-01-01
          • 2011-09-26
          • 1970-01-01
          相关资源
          最近更新 更多