我想知道是否有人有方法将NSTableView中允许的选择数量限制为2个并发选择。我试图计算两个选定值之间的差值,并希望它一次只能选择两个。
我正在考虑尝试跟踪已选择的内容,以便我可以通过编程方式取消选择任何内容,如果选择扩展到2以上,但这看起来很糟糕,可能并不像听起来那么简单。
答案 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;
}
我将不得不更多地处理它以获得我想要的行为,因为这个小片段只是拒绝用户选择更多内容;也有点突然。因此,我可能会添加更多代码,以允许用户在自动取消选择其他内容时选择新行。
再次感谢!