1

我正在观察 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,它会重置选择索引。仍然不确定我想如何解决这个问题,因为我确实需要将选择设置回零。

4

1 回答 1

0

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

[self.collectionView setSelectionIndexes:[NSIndexSet indexSet]];
于 2013-07-08T12:53:22.027 回答