Вы должны немедленно установить свойство enabled
или hidden
кнопки, чтобы отключить взаимодействие.
ОДНАКО это изменение не вступит в силу до следующего хода следующего цикла выполнения, когда все будет перерисовано. Когда ваш код стоит, ваш код скрывает кнопку, делает что-то, а затем скрывает кнопку, все, прежде чем кнопка получит шанс перерисовать .
Что вам нужно сделать, это установить свойство hidden
и затем начать вычисления (желательно в фоновом потоке). Один раз и только после завершения вычислений вы должны дать понять главному потоку, чтобы снова скрыть кнопку.
Если вы согласны с тем, что эта работа работает только на iOS 4.0+, вы можете легко выполнить это с помощью Grand Central Dispatch:
- (IBAction)doStuff:(id)sender {
[button setEnabled:NO];
dispatch_async(dispatch_get_global_queue(0,0), ^{
// do all your computation/synchronous requesting here
// this will happen on a background thread
dispatch_async(dispatch_get_main_queue(), ^{
[button setEnabled:YES];
});
});
}