2013-05-13 55 views
0

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

我正在考虑试着跟踪选择的内容,以便我可以以编程方式取消选择任何东西,如果选择扩展到两个以上,但这看起来很烂并且可能不像听起来那么容易。

回答

1

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

为了得到当前选择的行数在任何特定时间,只需拨打selectedRowIndexes表视图(未委托,也不数据源)。这将给你一个NSIndexSet,它有一个count方法与你正在寻找的信息。

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

不知道应用程序的任何内容,用户体验听起来有点......奇怪。尽管如此,实施起来很容易,所以在试用时不会造成任何伤害。

+0

有没有tableView:shouldSelectRow:委托方法 – 2013-05-13 20:00:07

+0

我的不好,我读的不是NSTableView的UITableView。对不起 – 2013-05-13 20:03:31

+0

感谢Monolo,我刚刚发现了这个,并在发布这个时候回答我自己的问题:) – Andrew 2013-05-13 20:10:49

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声明。也许你还想要按行的顺序存储 - 这可以在第一和第二种情况下完成。

0

谢谢你们提出一些事情来帮助我的大脑走向正确的方向。我开始探索NSTableViewDelegate多一点,希望找到一些有用的帮助,并重新阅读此方法:tableView:shouldSelectRow,它允许我允许或拒绝行选择。所以,现在我可以简单地拒绝选择我有2个已经选择了第三排提供:

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

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

    return returnValue; 
} 

我必须要在它的一些更多的工作,以获得正是我想要的行为,因为这个小片段,它只是拒绝用户不再选择任何东西;也有点突然。所以我可能会添加更多的代码,以允许用户选择一个新的行,而自动取消选择其他的东西。

再次感谢!

+0

当Monolo发布他的答案时写道:o – Andrew 2013-05-13 20:11:44