我正在创建一个新的Swift(3.0)framenwork,它涉及使用以其他视图编程方式创建的NSSearchField。 这个framenwork的部署目标设置为10.10,我发现奇怪的是无法为它设置委托方法。事实上,NSSearchFieldDelegate只在10.11 on。
上出现pm.setAttr (e=True, keyable=True, elem +'.mtoa_constant_lightGroup')
# ---- here ----------------------^
}
好吧,我认为它是NStextField固有的,也许我可以访问单元格并使用超类委托设置,但不幸的是我找不到办法做到这一点。
我需要的是能够在10.10中接收NSText / NSTextField通知。我怎样才能做到这一点?
EDITED: 添加了更多关于如何制作加上一些图片的信息
答案 0 :(得分:1)
如果没有提供更多信息,我猜您忘了宣布您的班级符合NSSearchFieldDelegate
。
请参阅下面的示例,如何设置它,例如viewController。您只需为您的vc创建一个扩展,并声明它符合该委托。
class SearchViewController: NSViewController {
let searchField: NSSearchField? = NSSearchField(frame: .zero)
override func viewWillAppear() {
super.viewWillAppear()
if #available(OSX 10.11, *) {
self.searchField?.delegate = self
} else {
// Fallback on earlier versions
}
}
}
extension SearchViewController: NSSearchFieldDelegate {
func searchFieldDidStartSearching(_ sender: NSSearchField) {
print("didStart")
}
func searchFieldDidEndSearching(_ sender: NSSearchField) {
print("didEnd")
}
}
修改强>
要在早期版本的Mac OS中捕获textDidChange
事件,您需要继承NSSearchField
并覆盖textDidChange
函数。每次在searchField中发生更改时,它都会为您调用该函数。
class DLSearchField: NSSearchField {
override func textDidChange(_ notification: Notification) {
Swift.print("textDidChange")
}
}