我有这一行“func tableView(_ tableView:NSTableView,didClick tableColumn:NSTableColumn){code here}”
这个函数不做任何事情。我想单击表格视图中的一行并在单击时执行一些操作。但它什么也没做。该行显示正确,但缺少操作。我还在该函数中添加了“print(“Clicked”),但即使这样也不会显示在日志信息中”
我还能怎么做呢?
我有这一行“func tableView(_ tableView:NSTableView,didClick tableColumn:NSTableColumn){code here}”
这个函数不做任何事情。我想单击表格视图中的一行并在单击时执行一些操作。但它什么也没做。该行显示正确,但缺少操作。我还在该函数中添加了“print(“Clicked”),但即使这样也不会显示在日志信息中”
我还能怎么做呢?
经过测试,我发现它是通过点击列区域触发的。正如它的参数所说,“确实点击了表格列”,而不是表格行。
用于NSTableView.selectionDidChangeNotification
检测选择
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.didSelectRow(_:)), name: NSTableView.selectionDidChangeNotification, object: tableView)
}
@objc
func didSelectRow(_ noti: Notification){
guard let table = noti.object as? NSTableView else {
return
}
let row = table.selectedRow
print(row)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
从文档中tableView(_:didClick:)
:“告诉代表在指定的表格列中单击了鼠标按钮,但没有拖动该列。”。连续单击时不会调用此方法。如果您想在表格视图中捕捉点击,请将表格视图、行视图或单元格视图子类化并覆盖mouseDown(with:)
。另一种解决方案:让表格视图处理点击并使用选定的行。委托有几种方法来检测选择的变化。