将NSTableView限制为两个选项

时间:2013-05-13 19:34:38

标签: objective-c macos nstableview

我想知道是否有人有方法将NSTableView中允许的选择数量限制为2个并发选择。我试图计算两个选定值之间的差值,并希望它一次只能选择两个。

我正在考虑尝试跟踪已选择的内容,以便我可以通过编程方式取消选择任何内容,如果选择扩展到2以上,但这看起来很糟糕,可能并不像听起来那么简单。

3 个答案:

答案 0 :(得分:1)

实现委托方法tableView:shouldSelectRow:,如果您认为不允许用户选择该行,则返回NO。由于任何原因您决定 - 例如因为所选行的数量已经是2.

要在任何给定时间获取当前所选行的数量,只需在表视图(不是委托,也不是数据源)上调用selectedRowIndexes。这将为您提供NSIndexSet,其中包含count方法,其中包含您要查找的信息。

索引集还包含有关已选择的其他行索引的信息,以防您想要取消选择它们。

对应用程序一无所知,用户体验听起来有点......奇怪。但是,这很容易实现,因此在尝试时不会造成任何伤害。

答案 1 :(得分:0)

在表格视图的委托中,您可以实施-[<NSTableViewDelegate> tableViewSelectionDidChange:(NSNotification *)]

也许是这样的:

- (void)tableViewSelectionDidChange:(NSNotification *)notification
{
    switch ([notification.object numberOfSelectedRows]) {
        case 0: break; // Nothing is selected
        case 1: break; // Only one row selected
        case 2: break; // Two rows
        default:
           ... unselect rows ...
           break;
    }
}

当然,您也可以使用if语句。也许你还想存储点击行的顺序 - 这可以在第一和第二种情况下完成。

答案 2 :(得分:0)

感谢你们提出一些帮助我的大脑进入正确方向的东西。我开始探索NSTableViewDelegate更多希望找到一些可以帮助解决此问题的方法并重新阅读此方法:tableView:shouldSelectRow它允许我允许或拒绝行选择。所以现在我可以简单地拒绝选择第三行,前提是我已经选择了2个:

- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex
{
    BOOL returnValue = YES;

    if (_timeStampList.selectedRowIndexes.count >= 2)
        returnValue = NO;

    return returnValue;
}

我将不得不更多地处理它以获得我想要的行为,因为这个小片段只是拒绝用户选择更多内容;也有点突然。因此,我可能会添加更多代码,以允许用户在自动取消选择其他内容时选择新行。

再次感谢!