我想知道是否有人有办法将 NSTableView 中允许的选择数量限制为 2 个并发选择。我正在尝试计算两个选定值之间的增量,并希望它一次只选择两个。
我正在考虑尝试跟踪已选择的内容,以便如果选择扩展到两个以上,我可以以编程方式取消选择任何内容,但这看起来很笨拙,可能不像听起来那么容易。
我想知道是否有人有办法将 NSTableView 中允许的选择数量限制为 2 个并发选择。我正在尝试计算两个选定值之间的增量,并希望它一次只选择两个。
我正在考虑尝试跟踪已选择的内容,以便如果选择扩展到两个以上,我可以以编程方式取消选择任何内容,但这看起来很笨拙,可能不像听起来那么容易。
tableView:shouldSelectRow:
如果您认为不应允许用户选择该行,请实现委托方法并返回 NO。由于您决定的任何原因 - 例如因为选定的行数已经是 2。
要在任何给定时间获取当前选定的行数,只需调用selectedRowIndexes
表视图(不是委托,也不是数据源)。这会给你一个NSIndexSet
,它有一个count
包含你正在寻找的信息的方法。
索引集还保存有关已选择的其他行索引的信息,以防您想取消选择它们。
对应用程序一无所知,用户体验听起来有点……奇怪。但是,它很容易实现,因此尝试它并没有什么坏处。
在您的表视图的委托中,您可以实现-[<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
语句。也许您还想存储单击行的顺序——这可以在案例一和案例二中完成。
感谢你们俩想出一些东西来帮助我的大脑朝着正确的方向前进。我开始探索NSTableViewDelegate
更多,希望能找到一些有助于解决此问题的方法并重新阅读此方法:tableView:shouldSelectRow
它允许我允许或拒绝行选择。所以现在我可以简单地拒绝选择第三行,只要我已经选择了 2 行:
- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex
{
BOOL returnValue = YES;
if (_timeStampList.selectedRowIndexes.count >= 2)
returnValue = NO;
return returnValue;
}
我必须做更多的工作才能得到我想要的行为,因为这个小片段只是拒绝用户选择更多内容;也有点突然。所以我可能会添加更多代码以允许用户在自动取消选择其他内容时选择新行。
再次感谢!