Я наблюдаю за «selectionIndexes» экземпляра NSCollectionView следующим образом:
[self.collectionView addObserver:self forKeyPath:@"selectionIndexes" options:0 context:nil];
Затем я отвечаю на изменения вObservValueForKeyPath: вот так:
if(object == self.collectionView)
{
if([keyPath isEqualToString:@"selectionIndexes"])
NSLog(@"selectionIndexes CHANGED");
}
Я заметил, что если я нажимаю на элемент, я получаю два уведомления: одно для события «нажатие мыши» и еще раз для события «нажатие мыши». Оба раза свойство selectionIndexes возвращает индекс элемента. Вы даже можете сделать щелчок медленно, вниз-пауза-вверх и наблюдать за двумя отдельными срабатываниями в журналах.
Это не кажется нормальным, как мне остановить это? Есть ли лучший способ получать уведомления при нажатии NSCollectionItem?
ОБНОВЛЕНИЕ: я обнаружил, что он срабатывает дважды, потому что я также очищал выбор вObservValueForKeyPath:
if(object == self.collectionView)
{
if([keyPath isEqualToString:@"selectionIndexes"])
{
NSLog(@"selectionIndexes CHANGED");
[self.collectionView setSelectionIndexes:nil];
}
}
По какой-то причине NSCollectionView видит, что его выбор установлен на nil в событии мыши вверх от элемента, и сбрасывает индексы выбора. Все еще не уверен, как я хочу обойти это, потому что мне нужно установить выделение обратно на ноль.