2017-08-05 99 views
0

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

import Cocoa 

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

} 

编辑: 我的问题是,在NSSearchFieldDelegate功能controlTextDidChange不叫。

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

+0

会发生什么? – adev

+0

我不知道你在做什么。为什么你甚至需要为NSSearchField写一个紧张?让cancelButton = cell?.cancelButtonCell? –

+0

@adev这将清空searchField中的textView – justBorn

回答

0

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

您的扩展是没问题的。

这里有一个例子,当你做`self.stringValue = “”`

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) 
} 
}