我有这一行" func tableView(_ tableView:NSTableView,didClick tableColumn:NSTableColumn){code here}"
此功能不起作用。我想在表格视图中单击一行,并在单击它时执行一些操作。但它没有做任何事情。该行显示正确,但缺少操作。我在该功能中添加了" print(" Clicked"),但即使这样也没有显示在日志信息中#34;
我怎么能让这个工作?
答案 0 :(得分:0)
来自tableView(_:didClick:)
的文档:"告诉代理人在指定的表列中单击了鼠标按钮,但未拖动该列。" 。单击一行时,不会调用此方法。如果要捕获tableview中的单击,请将表视图,行视图或单元视图子类化并覆盖mouseDown(with:)
。
另一种解决方案:让表视图处理单击并使用所选行。代表有几种方法可以检测选择中的变化。
答案 1 :(得分:0)
使用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)
}
答案 2 :(得分:0)
经过测试,我发现它是由单击列区域触发的。正如其参数所说,“单击表列是单击的,而不是表行。”