У меня есть пользовательский NSView
(он один из многих, и все они живут внутри NSCollectionView
- я не думаю, что это релевантно, но кто знает). Когда я нажимаю вид, я хочу, чтобы он изменил свое состояние выбора (и перерисовал его соответственно); когда я дважды щелкнул представление, я хочу, чтобы он всплыл в окне предварительного просмотра для объекта, который был просто дважды щелкнул.
Сначала я выглядел так:
- (void)mouseUp: (NSEvent *)theEvent {
if ([theEvent clickCount] == 1) [model setIsSelected: ![model isSelected]];
else if ([theEvent clickCount] == 2) if ([model hasBeenDownloaded]) [mainWindowController showPreviewWindowForPicture:model];
}
который в основном работал нормально. Кроме того, когда я дважды щелкнул вид, состояние выбора изменяется, и окно всплывает. Это не совсем то, что я хочу.
Кажется, у меня есть два варианта. Я могу либо вернуть состояние выбора при ответе на двойной щелчок (отмена ошибочного однократного нажатия), либо я могу оформить какое-то решение NSTimer
, чтобы построить задержку, прежде чем отвечать на один клик. Другими словами, я могу убедиться, что второй клик не появится перед изменением состояния выбора.
Это казалось более элегантным, так что это был подход, который я сделал сначала. Единственное реальное руководство, которое я нашел от Google, было на неназванном сайте с дефисом в его названии. Этот подход в основном работает с одним большим предостережением.
Непонятный вопрос: "Как долго ждать мой NSTimer
?". На неназванном сайте предлагается использовать функцию Carbon GetDblTime()
. Помимо того, что в 64-битных приложениях не используется, единственная документация, которую я могу найти для нее, говорит о том, что она возвращает тики. И я не знаю, как преобразовать их в секунды для NSTimer
.
Итак, что здесь означает "правильный" ответ? Погрузитесь с помощью GetDblTime()
? "Отменить" выбор по двойному щелчку? Я не могу понять Cocoa -диоматический подход.