Проблема с настройкой UIButton на скрытый внутри IBAction

#iphone #objective-c #uibutton #hidden

#iPhone #objective-c #uibutton #скрытый

Вопрос:

Хорошо, у меня есть этот код в моем ViewController.m :

 @implementation ViewController

@synthesize generateButton = _generateButton;
@synthesize activityIndicator = _activityIndicator;
@synthesize doneLabel = _doneLabel;

// ...

- (IBAction)buttonPressed
{
    // show activity indicator
    _generateButton.hidden = YES;
    _activityIndicator.hidden = NO;

    NSLog(@"processing starting...");

    // do processor heavy work

    NSLog(@"processing done!");

    // display done message
    _activityIndicator.hidden = YES;
    _doneLabel.hidden = NO;
}

// ...

@end
  

activityIndicator и doneLabel оба имеют значение скрытый в interface builder. -(IBAction)buttonPressed подключено к generateButton событию Touch Up Inside .

Проблема в том, что кнопка не скрывается, пока процессор работает. Он просто сохраняет видимым состояние синего нажатия по умолчанию, пока не закончит работу, затем показывает doneLabel .

Ответ №1:

Это потому, что ваш код выполняет весь процесс в одном потоке.

Этот поток заблокирован до завершения «интенсивной работы процессора»

Вы должны выполнить эту «тяжелую работу» в отдельном потоке и установить состояние кнопки и индикатора активности после завершения этого отдельного потока

Вы можете использовать либо NSThread для создания нового потока для выполнения задачи, либо вызвать performSelectorInBackground:withObject:

В любом случае, ознакомьтесь с Руководством по потоковой обработке в Apple Dev Center

Комментарии:

1. Звучит довольно неплохо. Я еще не касался многопоточности, но буду считать это ответом. Приветствия 🙂