【问题标题】:swift osx NSSearchField reset programmaticallyswift osx NSSearchField 以编程方式重置
【发布时间】:2017-08-05 00:34:57
【问题描述】:

我对 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。

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

【问题讨论】:

  • 当你self.stringValue = ""时会发生什么?
  • 我不知道你想做什么。为什么你甚至需要为 NSSearchField 写一个张力?让 cancelButton = cell?.cancelButtonCell ???
  • @adev 这将清空 searchField 中的 textView
  • @ElTomato 每次显示隐藏视图时,我都需要清空/清除 NSSearchField。目前我找到了这个解决方法,但这不会触发任何事件,我必须手动更新搜索结果。
  • 好吧,你说self.stringValue = "" 将是空的。你最后的评论说这也是你想做的。那么这里有什么问题呢?你为什么不单独使用它?为什么你甚至需要在cancelButtonCell 上做performClick

标签: swift macos cocoa swift3 nssearchfield


【解决方案1】:

设置你的委托,否则不会调用 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)
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多