Macos Can';t在插入文本并清除后退出NSSearchField
我在我的NSViewController中添加了一个NSSearchField,它是我的大纲视图的主控制器。现在它实现了以下类:Macos Can';t在插入文本并清除后退出NSSearchField,macos,cocoa,nssearchfield,Macos,Cocoa,Nssearchfield,我在我的NSViewController中添加了一个NSSearchField,它是我的大纲视图的主控制器。现在它实现了以下类: class MainCatalogNSViewController: NSViewController, NSOutlineViewDelegate, NSOutlineViewDataSource, NSSearchFieldDelegate { override func viewDidLoad() { super.viewDidLoad(
class MainCatalogNSViewController: NSViewController, NSOutlineViewDelegate, NSOutlineViewDataSource, NSSearchFieldDelegate {
override func viewDidLoad() {
super.viewDidLoad()
searchField.delegate = self
}
}
搜索字段运行良好,没有任何问题,直到我如上所述设置了一个委托。
设置后,如果已编辑并清除,则无法退出
你能解释一下为什么会这样吗?这个问题是否与大纲视图有关?我以前使用过NSSearchField,它一直运行良好
问题的根源是NSViewController中声明的下一个方法,该方法阻止在大纲视图中保存空单元格:
func control(_ control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool {
// don't allow empty node names
return !(fieldEditor.string.isEmpty ?? true)
}
现在它在本例中处理
NSSearchField
事件,而不是大纲视图表格单元格编辑。您是否实现了NSSearchFieldDelegate
方法?@Willeke否,我只添加了NSSearchFieldDelegate
并为搜索字段分配了一个委托。这很奇怪,我在下一个大纲视图中有相同的NSSearchField
,但它是一个NSTableView
而不是NSOutlineView
。搜索字段是如何工作的,它是否连接到操作方法?您是否实现了任何NSTextFieldDelegate
或NSControlTextEditingDelegate
方法?@Willeke,看来我找到了问题的根源。我声明了可选的control(){}
方法,该方法防止在outline视图中提交空项。现在我需要弄清楚如何区分NSTableCell和NSSearchFIeld输入。