我正在使用Xcode 10(测试版)设计一个Mac应用程序,但“偏好设置窗口控制器”出现问题
我的Main.storyboard中有一个自定义类 PreferenceWindowController 的 NSWindowController ,带有工具栏。这是它的连接:
这是完整的课程:
class PreferenceWindowController: NSWindowController, NSWindowDelegate {
@IBAction func didClickAuthor(_ sender: Any) {
print("author")
}
@IBAction func didClickTypo(_ sender: Any) {
print("typo")
}
override func windowDidLoad() {
super.windowDidLoad()
}
func windowWillClose(_ notification: Notification) {
print("willClose")
}
}
该窗口是通过 AppDelegate 类使用以下代码启动的:
let storyboard = NSStoryboard(name: "Main",bundle: nil)
if let wc = storyboard.instantiateController(withIdentifier: "PreferenceWindowController") as? PreferenceWindowController
{
wc.showWindow(self)
}
该窗口将按预期打开,工具栏可单击,但根本不会调用PreferenceWindowController的函数,也不会关闭窗口或在工具栏上单击。
我检查了每个连接,每个类名,但我真的不知道怎么了...
解决方案
解决方案是将PreferenceViewController类存储在AppDelegate类中作为变量。
我的解决方案:
var preferenceWindowController:PreferenceWindowController? = nil
@IBAction func clickPreferences(_ sender: Any) {
if let wc = storyboard.instantiateController(withIdentifier: "PreferencesWindowController") as? PreferenceWindowController {
let window = wc.window
preferenceWindowController = wc
wc.showWindow(self)
}
}
谢谢您的帮助!
答案 0 :(得分:1)
上面的评论似乎可能在正确的轨道上。根据问题中包含的代码上下文,看起来您创建的窗口控制器将对该函数调用仅存在生命期。
尝试使窗口控制器成为实例变量。通常,这就是我在创建窗口控制器的App委托中进行接线的方式。这是一个行之有效的简单模式。