NSTableView - 禁用行选择

时间:2011-09-02 15:05:15

标签: cocoa selection nstableview

我有一个NSTableView,我想禁用行选择。

表视图的列绑定到NSArrayController,并且数组的内容确实显示在表视图中。

如何使用bindings

执行此操作

8 个答案:

答案 0 :(得分:23)

我认为你需要使用TableViewDelegate并实现

- (NSIndexSet *)tableView:(NSTableView *)tableView 
    selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes

答案 1 :(得分:15)

虽然之前的答案有效,但这是我更喜欢使用的另一种选择:

- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex
{
    return NO;
}

答案 2 :(得分:13)

我认为

- (BOOL)selectionShouldChangeInTableView:(NSTableView *)aTableView
{
  return NO;
}

优于

- (NSIndexSet *)tableView:(NSTableView *)tableView selectionIndexesForProposedSelection:(NSIndexSet *)proposedSelectionIndexes

答案 3 :(得分:7)

Swift 4.0

func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool {
    return false
}

答案 4 :(得分:1)

作为后人的一个注释......

如果声明selectionIndexesForProposedSelection,那么将忽略shouldSelectRow函数。万一你想知道我为什么我对edSelectRow的编辑没有效果......

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSTableViewDelegate_Protocol/index.html#//apple_ref/occ/intfm/NSTableViewDelegate/tableView:selectionIndexesForProposedSelection

答案 5 :(得分:0)

使用绑定:

在绑定的情况下,您可以将布尔值与Enabled绑定。 binding inspector

如果样本中的值为true,则它将是可选的,否则将不是。 这样,当通过绑定完成所有其他工作时,我们不需要仅使用委托来禁用选择。

答案 6 :(得分:0)

使用绑定:

另一种方法是在与表视图的“属性检查器”中的“选择”相对应的复选框列表中选择“空”。默认情况下,这不会选择任何行。

除此之外,将突出显示选项设置为“无”。

screenshot of attribute inspector

答案 7 :(得分:0)

enter image description here>默认情况下,通过此操作,TableView选择将从绑定检查器中删除

enter image description here

enter image description here