#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. Звучит довольно неплохо. Я еще не касался многопоточности, но буду считать это ответом. Приветствия 🙂