Yosemite 中的 NSSearchField 委托
NSSearchField delegate in Yosemite
我正在制作一个新的 Swift (3.0) 框架,它涉及使用以编程方式创建的 NSSearchField,就像其他视图一样。
此框架将部署目标设置为 10.10,我发现无法为其设置委托方法很奇怪。事实上 NSSearchFieldDelegate 只出现在 10.11 上可用。
class PlistEditor: NSObject, NSOutlineViewDelegate, NSOutlineViewDataSource, NSTextFieldDelegate, NSSearchFieldDelegate {
var searchField : NSSearchField?
// more code..
init(tabItem: NSTabViewItem,
plistPath: String?) {
// more code..
let sf = NSSearchField(frame: NSMakeRect(80, 0, 80, 22))
self.searchField? = sf
// more code..
super.init()
// more code..
if #available(OSX 10.11, *) {
self.searchField?.delegate = self
} else {
// Fallback on earlier versions
}
// more code
}
}
好的,我认为它是 NStextField 固有的,也许我可以访问单元格并使用超类委托进行设置,但不幸的是我找不到这样做的方法。
我需要的是能够在 10.10 中收到 NSText/NSTextField 通知。我怎样才能做到这一点?
已编辑:
添加了更多关于如何制作的信息以及一些图片
没有提供更多信息,我猜你忘了声明你的 class 符合 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
事件,您需要 subclass NSSearchField
并覆盖 textDidChange
函数。每当 searchField 发生变化时,它都会为您调用该函数。
class DLSearchField: NSSearchField {
override func textDidChange(_ notification: Notification) {
Swift.print("textDidChange")
}
}
我正在制作一个新的 Swift (3.0) 框架,它涉及使用以编程方式创建的 NSSearchField,就像其他视图一样。 此框架将部署目标设置为 10.10,我发现无法为其设置委托方法很奇怪。事实上 NSSearchFieldDelegate 只出现在 10.11 上可用。
class PlistEditor: NSObject, NSOutlineViewDelegate, NSOutlineViewDataSource, NSTextFieldDelegate, NSSearchFieldDelegate {
var searchField : NSSearchField?
// more code..
init(tabItem: NSTabViewItem,
plistPath: String?) {
// more code..
let sf = NSSearchField(frame: NSMakeRect(80, 0, 80, 22))
self.searchField? = sf
// more code..
super.init()
// more code..
if #available(OSX 10.11, *) {
self.searchField?.delegate = self
} else {
// Fallback on earlier versions
}
// more code
}
}
好的,我认为它是 NStextField 固有的,也许我可以访问单元格并使用超类委托进行设置,但不幸的是我找不到这样做的方法。
我需要的是能够在 10.10 中收到 NSText/NSTextField 通知。我怎样才能做到这一点?
已编辑: 添加了更多关于如何制作的信息以及一些图片
没有提供更多信息,我猜你忘了声明你的 class 符合 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
事件,您需要 subclass NSSearchField
并覆盖 textDidChange
函数。每当 searchField 发生变化时,它都会为您调用该函数。
class DLSearchField: NSSearchField {
override func textDidChange(_ notification: Notification) {
Swift.print("textDidChange")
}
}