В моем приложении Mac у меня есть NSCollectionView с включенным multi select. В моем приложении возможность выбора более одного элемента является нормой, и при нажатии кнопки cmd при нажатии на несколько элементов происходит разочарование некоторых пользователей, и большинство из них не понимают, что они могут это сделать. (Я получаю много запросов функций для multi select).Изменение поведения выбора NSCollectionView
Итак, я хочу, чтобы изменить поведение, так что:
- , когда пользователь нажимает на второй элемент, первый элемент остается выбранным (без необходимости проведения CMD)
- Когда пользователь нажимает кнопку выбранный элемент, элемент выключенной
Я попытался переопределение setSelected на моем собственном подклассе NSCollectionViewItem так:
-(void)setSelected:(BOOL)flag
{
[super setSelected:flag];
[(MyView*)[self view] setSelected: flag];
[(MyView*)[self view] setNeedsDisplay:YES];
}
Вызывающий супер наборВыбранный необходим, чтобы убедиться, что просмотр коллекции функционирует правильно, но также, похоже, отвечает за поведение по умолчанию.
Что мне делать вместо этого?
Это действительно работает, но, к сожалению, я ntercepting на уровне событий мыши и добавление cmd ко всем кликам над NSCollectionView ломает еще одну важную особенность моего приложения. В моем представлении коллекции есть другие элементы управления, которые добавляют cmd к событию мыши, изменяя их поведение. Я могу найти способ распознать событие мыши, основанное на его местоположении пикселей. Это нормально для общего контроля, но по мере того, как суб-элементы управления перемещаются, я не думаю, что это практично. –
Это решение будет работать для других, но у кого нет других элементов управления, требующих событий мыши в их NSCollectionView. –
Получил его, используя измененную версию того, что вы предложили. Надеюсь, вы не против, но я добавил его к вашему ответу, поскольку вы заслуживаете большей части кредита. Не стесняйтесь редактировать ответ, чтобы сделать его более кратким и полезным для будущих людей. –