Новичок ПредупреждениеКак запретить NSButton регистрировать прессы во время их отключения?
У меня есть простая, но неприятная проблема пытается отключить NSButton. Вот пример кода, чтобы проиллюстрировать проблему:
- (IBAction)taskTriggeredByNSButtonPress:(id)sender {
[ibOutletToNSButton setEnabled:NO];
//A task is performed here that takes some time, during which time
//the button should not respond to presses.
//Once the task is completed, the button should become responsive again.
[ibOutletToNSButton setEnabled:YES];
}
Это то, что я наблюдаю. Я нажимаю кнопку. Кнопка становится отключенной (судя по ее выцветшему виду), и задача начинает выполняться. Пока кнопка отключена и выполнение задачи выполняется, я нажимаю кнопку второй раз. Ничего не происходит сразу, но как только задача завершена, метод taskTriggeredByNSButtonPress:
вызывается во второй раз, предполагая, что нажатие второй кнопки было приостановлено, а затем активировано после повторного включения кнопки.
Я пробовал всевозможные хаки, чтобы предотвратить нажатие второй кнопки, включая введение временной задержки после инструкции [ibOutletToNSButton setEnabled:NO];
, заставляя кнопку скрывать, а не отключать, закрывая кнопку с пользовательским представлением в течение времени он должен быть отключен, привязав статус кнопки enabled
к собственности, и другие вещи, о которых я слишком смущен, чтобы упомянуть.
Пожалуйста, помогите мне понять, почему я не могу получить эту простую задачу отключения кнопки для работы.
Ваш метод 'buttonPushed:' немедленно включит кнопку, потому что для отсоединения потока требуется незначительное время. После завершения обработки вам необходимо обновить состояние кнопки, для чего потребуется запрос уведомления или метода из вторичного потока, используя 'performSelectorOnMainThread: withObject:'. –
Вы, ребята, фантастичны. Я выполнил длинную задачу в фоновом потоке с помощью NSThread и, как предположил Роб, повторно включил кнопку из вторичного потока. Вуаля! Мало того, что пользовательский интерфейс остается отзывчивым, но кнопка отключает и повторно включает, как следует. И Рэнди, спасибо за подсказку об использовании 'sender'. Это хорошая эффективность. – scolfax
@RobKeniger Извините, я не заметил свою ошибку. Спасибо, я обновлю его. –