我想知道是否有人有一种方法将NSTableView中允许的选择数量限制为2个并发选择。我试图计算两个选定值之间的增量,并希望它一次只选择两个值。将NSTableView限制为两个选择
我正在考虑试着跟踪选择的内容,以便我可以以编程方式取消选择任何东西,如果选择扩展到两个以上,但这看起来很烂并且可能不像听起来那么容易。
我想知道是否有人有一种方法将NSTableView中允许的选择数量限制为2个并发选择。我试图计算两个选定值之间的增量,并希望它一次只选择两个值。将NSTableView限制为两个选择
我正在考虑试着跟踪选择的内容,以便我可以以编程方式取消选择任何东西,如果选择扩展到两个以上,但这看起来很烂并且可能不像听起来那么容易。
实施委托方法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;
}
我必须要在它的一些更多的工作,以获得正是我想要的行为,因为这个小片段,它只是拒绝用户不再选择任何东西;也有点突然。所以我可能会添加更多的代码,以允许用户选择一个新的行,而自动取消选择其他的东西。
再次感谢!
当Monolo发布他的答案时写道:o – Andrew 2013-05-13 20:11:44
有没有tableView:shouldSelectRow:委托方法 – 2013-05-13 20:00:07
我的不好,我读的不是NSTableView的UITableView。对不起 – 2013-05-13 20:03:31
感谢Monolo,我刚刚发现了这个,并在发布这个时候回答我自己的问题:) – Andrew 2013-05-13 20:10:49