从Swift中的两个NSWindows传递变量

时间:2016-02-15 22:56:05

标签: swift protocols nswindow nswindowcontroller

我正在尝试从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没有被调用。

关于我做错的任何想法?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

正如您在上面的第二个代码块中所做的那样,一个类采用了一个协议。现在,您的视图控制器必须实现SearchForIt方法,然后您的视图控制器可以接受调用,而不是单独定义的对象。

在controlTextDidChange中,用您的viewcontroller实例替换responder。