【发布时间】:2018-12-28 20:53:11
【问题描述】:
我在将自定义协议 (MainWindowControllerProtocol) 从 MainWindowController 传递到 EditorViewController 时遇到问题,MainWindowController 是 NSWindowController 的子类。请帮忙。
EditorViewController.swift
extension EditorViewController: MainWindowControllerProtocol {
func didOpenFile() {
print("TODO: Open File") // never called, but it should be
}
}
class EditorViewController: NSViewController {
// - IBOutlets
@IBOutlet weak var treeOutlineView: NSOutlineView!
@IBOutlet var codeTextView: NSTextView!
@IBOutlet weak var counterTextField: NSTextField!
@IBOutlet weak var languageTextField: NSTextField!
//public var editor = Editor()
//var rootNode: Node?
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
//rootNode = Path(Path.userDownloads).node
// Issue is here
if let windowController = NSApplication.shared.mainWindow?.windowController as? MainWindowController {
windowController.delegate = self
}
else {
print("Doesnt work") // prints this
}
//treeOutlineView.reloadData()
}
}
MainWindowController
public protocol MainWindowControllerProtocol {
func didOpenFile()
}
class MainWindowController: NSWindowController {
var delegate: MainWindowControllerProtocol?
override func windowDidLoad() {
super.windowDidLoad()
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
}
@IBAction func openFile(_ sender: Any) {
print("In here") // this is called?
delegate?.didOpenFile() // but this never is apparently
}
}
【问题讨论】:
-
你如何呈现
MainWindowController? -
MainWindowController似乎没有在EditorViewController内部实例化。当你实例化它时,你可以将它的委托设置为self’
标签: swift cocoa delegates protocols nswindowcontroller