Как запретить selectionIndexes NSCollectioView уведомлять как о mouseDown, так и о mouseUp

Я наблюдаю за «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 в событии мыши вверх от элемента, и сбрасывает индексы выбора. Все еще не уверен, как я хочу обойти это, потому что мне нужно установить выделение обратно на ноль.


person Ryan Nichols    schedule 15.11.2012    source источник


Ответы (1)


Чтобы установить пустой выбор, установите selectionIndexes на пустой NSIndexSet следующим образом:

[self.collectionView setSelectionIndexes:[NSIndexSet indexSet]];
person ipmcc    schedule 08.07.2013