Временно остановить UIButton от ответа - PullRequest
0 голосов
/ 09 ноября 2011

В моем приложении есть кнопка, которая вызывает длинную асинхронную функцию, которую мы не хотим вызывать несколько раз одновременно. Однако, когда я начинаю нажимать на кнопку, она всегда отправляет столько сообщений, сколько нажатий. Я хочу, чтобы кнопка не реагировала во время работы функции. В настоящее время у меня есть флаг, который останавливает выполнение функции, когда функция активна в другом потоке, и кнопка настроена на скрытие, как только она входит в эту функцию, но это не имеет никакого эффекта.

Спасибо за любую помощь!

Ответы [ 4 ]

1 голос
/ 09 ноября 2011

Вместо того, чтобы думать об отключении кнопки, почему бы не сделать экран неактивным.Покажите какое-нибудь сообщение типа «Обработка ...» или Spinner.Таким образом, пользователь будет знать, что что-то происходит, и в то же время ваша проблема решена.

DSActivityView - это хорошая библиотека для этого.

1 голос
/ 09 ноября 2011

Предполагая, что:

  1. Ваша кнопка имеет ссылку на IBOutlet.
  2. У вас есть IBAction на кнопке.

Затем вы можете просто установить для свойства «Включено» кнопки значение «NO» и снова включить его, когда получите уведомление от задачи ASYNC о том, что она выполнена.

-(IBAction) buttonClicked {
    [myButton setEnabled:NO];
    //Do stuff
}

-(void) notificationHandlerMethodForAsyncTaskDone:(NSNotification *)notification {
    [myButton setEnabled:YES];
    //Do stuff
}
1 голос
/ 09 ноября 2011

Внутри метода обработки события касания вы можете отключить кнопку:

- (void)handleTouch:(id)sender {
   // Do your asynchronous call
   [sender setEnabled:NO];
}
0 голосов
/ 09 ноября 2011

Вы можете использовать свойство enabled для выключения кнопки:

[myButton setEnabled:NO]

Документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...