如何阻止NSCollectioView的selectionIndexes通知mouseDown和mouseUp

时间:2012-11-15 19:31:13

标签: cocoa key-value-observing nscollectionview

我正在观察NSCollectionView实例的'selectionIndexes',如下所示:

[self.collectionView addObserver:self forKeyPath:@"selectionIndexes" options:0 context:nil];

然后我回应observeValueForKeyPath的变化:像这样:

if(object == self.collectionView)
{
    if([keyPath isEqualToString:@"selectionIndexes"])
        NSLog(@"selectionIndexes CHANGED");
}

我注意到,如果我点击一个项目,我会收到两个通知,一个用于鼠标按下事件,另一个用于鼠标按下事件。两次,selectionIndexes属性都返回项目的索引。您甚至可以慢慢地进行点击,向下暂停并观察日志中的两个不同的点击。

这似乎不正常,我该怎么做呢?是否有更好的方法在单击NSCollectionItem时收到通知?

更新: 我发现它被解雇了两次,因为我还清除了observeValueForKeyPath中的选择:

if(object == self.collectionView)
{
    if([keyPath isEqualToString:@"selectionIndexes"])
    {
        NSLog(@"selectionIndexes CHANGED");
        [self.collectionView setSelectionIndexes:nil];
    }
}

出于某种原因,NSCollectionView在项目的鼠标注册事件中看到它的选择被设置为nil,并且它重置选择索引。仍然不确定我想要解决这个问题,因为我确实需要将选择设置回零。

1 个答案:

答案 0 :(得分:0)

要设置空选择,请将selectionIndexes设置为空NSIndexSet,如下所示:

[self.collectionView setSelectionIndexes:[NSIndexSet indexSet]];