我正在观察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,并且它重置选择索引。仍然不确定我想要解决这个问题,因为我确实需要将选择设置回零。
答案 0 :(得分:0)
要设置空选择,请将selectionIndexes
设置为空NSIndexSet
,如下所示:
[self.collectionView setSelectionIndexes:[NSIndexSet indexSet]];