Проблема с настройкой UIButton для скрытия изнутри IBAction - PullRequest
0 голосов
/ 03 мая 2011

Хорошо, у меня есть этот код в моих 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 оба скрыты в конструкторе интерфейса.-(IBAction)buttonPressed подключается к generateButton в событии Touch Up Inside.

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

1 Ответ

4 голосов
/ 03 мая 2011

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

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

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

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

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

...