0

我对 swift 很陌生,我正在尝试以编程方式重置 NSSearchField,但我没有找到合适的方法来做到这一点!目前我正在这样做

import Cocoa

extension NSSearchField {
    func reset() {
        self.stringValue = ""
        let cell = self.cell as? NSSearchFieldCell
        let cancelButton = cell?.cancelButtonCell
        cancelButton?.performClick(self)
    }

}

编辑:我的问题是在 NSSearchFieldDelegate 中没有调用函数 controlTextDidChange。

如何打电话来做到这一点?谢谢

4

1 回答 1

0

设置您的委托,否则将不会调用 controlTextDidChange

你的扩展不是问题。

这是一个例子,

class ViewController: NSViewController, NSSearchFieldDelegate {

// Search Field
@IBOutlet weak var mySearchField: NSSearchField!

override func viewDidLoad() {
    super.viewDidLoad()

    // Don't forget to set delegate
    self.mySearchField.delegate = self

}

// Driver program
@IBAction func onPress(_ sender: Any) {
    // clear search field
    self.mySearchField.reset()
}

// View output
override func controlTextDidChange(_ obj: Notification) {
    print("--");
}
}

extension NSSearchField {

func reset() {
    self.stringValue = ""
    //let cell = self.cell as? NSSearchFieldCell
    //let cancelButton = cell?.cancelButtonCell
    //cancelButton?.performClick(self)
}
}
于 2017-08-05T15:08:20.370 回答