我正在尝试从NSWindowController更新NSViewController中的标签。
这就是我所做的。
创建协议:
protocol PopoverProtocol: class {
func SearchForIt(Query:String)
}
创建了一个更新NSViewController中标签的函数
class PopoverController: NSViewController, PopoverProtocol {
@IBOutlet weak var Label: NSTextField!
func SearchForIt(Query:String){
Label.stringValue = Query
}
}
从NSWindowController调用协议和函数
class TutorialViewController: NSWindowController, NSSearchFieldDelegate {
weak var responder : PopoverProtocol?
@IBAction override func controlTextDidChange(obj: NSNotification) {
PopoVer.showRelativeToRect(SearchField.bounds, ofView: SearchField, preferredEdge: NSRectEdge.MinY)
responder?.SearchForIt(SearchField.stringValue)
}
}
但是没有发生任何事情。我没有收到任何错误消息,函数SearchForIt
没有被调用。
关于我做错的任何想法?谢谢你的帮助!
答案 0 :(得分:0)
正如您在上面的第二个代码块中所做的那样,一个类采用了一个协议。现在,您的视图控制器必须实现SearchForIt方法,然后您的视图控制器可以接受调用,而不是单独定义的对象。
在controlTextDidChange中,用您的viewcontroller实例替换responder。