防止上下文菜单显示在基于 NSTableView 的视图中的特定单元格上

Bog*_*rca 3 macos cocoa objective-c nstableview swift

在基于视图的特定单元格上右键单击时,是否有任何方法可以防止显示上下文菜单(以及单元格视图周围的相关选择“环”)NSTableView

我不是在谈论禁用对所有单元格的右键单击操作,而只是在特定的单元格上禁用。

我显然已经尝试了所有处理选择更改的委托方法,但没有一个有效,因为selectedRow属性没有改变,只有改​​变clickedRow。所以基本上我正在寻找相当于

func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool 
Run Code Online (Sandbox Code Playgroud)

但对于单击的行而不是选定的行。

:问题是关于NSTableViewMac系统,而不是UITableViewiOS上。

Bog*_*rca 5

我找到了一种方法来做我想做的事,虽然看起来有点涉及应该更简单的事情。所以我欢迎任何更简单的解决方案。

它可以通过继承 NSTableView 来完成:

class MyTableView : NSTableView {

    override func menu(for event: NSEvent) -> NSMenu? {
        let clickedPoint = self.convert(event.locationInWindow, from: nil)
        let row = self.row(at: clickedPoint)

        // no contextual menu for the last row
        return row == self.numberOfRows - 1 ? nil : super.menu(for: event)
    }
} 
Run Code Online (Sandbox Code Playgroud)

此示例阻止为最后一行显示上下文菜单,但可以通过添加具有返回每个单元格的菜单的方法的委托来实现更通用的解决方案。