В моем приложении я создал кнопку. При нажатии этой кнопки выполняется длинная задача, и кнопка отключается, когда задача запускается и включается, когда задача завершена. Моя проблема в том, что даже после отключения UIbutton он регистрирует событие клика и вызывает тот же метод после завершения задачи.Как остановить отключенный UIbutton от выполнения действия click
Я приложил мой код ниже:
- (IBAction)sync_data_all:(id)sender {
// disable button on main thread
[NSThread detachNewThreadSelector:@selector(DisableButton) toTarget:self withObject:nil];
UIApplication *app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = NO;
// long tasks start
[self fetchUNsyncedOrders];
[self DeleteproductCategoryTable];
[self deleteproductTable];
[self deletecustomersGroupsTable];
[self deletefetchCustomersTable];
[self deletefetchCustomersAddress];
[self deletefetchOrders];
[self deletefetchOrderItems];
[self deleteCreateOrdersGroups];
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
[NSThread detachNewThreadSelector:@selector(StartActivityIndicatorIn) toTarget:self withObject:nil];
progress = 0.0f;
[NSThread detachNewThreadSelector:@selector(progressBarProgress) toTarget:self withObject:nil];
@try {
[self productCategoryTable];
progress = 0.3;
[NSThread detachNewThreadSelector:@selector(progressBarProgress) toTarget:self withObject:nil];
[self productTable];
progress = 0.4;
[NSThread detachNewThreadSelector:@selector(progressBarProgress) toTarget:self withObject:nil];
[self customersGroupsTable];
progress = 0.5;
[NSThread detachNewThreadSelector:@selector(progressBarProgress) toTarget:self withObject:nil];
[self fetchCustomersTable];
progress = 0.6;
[NSThread detachNewThreadSelector:@selector(progressBarProgress) toTarget:self withObject:nil];
[self fetchCustomersAddress];
progress = 0.7;
[NSThread detachNewThreadSelector:@selector(progressBarProgress) toTarget:self withObject:nil];
[self fetchOrders];
progress = 0.8;
[NSThread detachNewThreadSelector:@selector(progressBarProgress) toTarget:self withObject:nil];
[self fetchOrderItems];
progress = 1.0;
[NSThread detachNewThreadSelector:@selector(progressBarProgress) toTarget:self withObject:nil];
[self CreateOrdersGroups];
}
@catch (NSException *exception)
{
[NSThread detachNewThreadSelector:@selector(syncNotComplete) toTarget:self withObject:nil];
syncError = YES;
}
@finally {
[self performSelector:@selector(increaseProgress) withObject:nil afterDelay:0.0];
}
// long task stop
[indicator stopAnimating];
self.view.userInteractionEnabled = YES;
_btn_sync_outlet.enabled = YES;
_btn_sync_outlet.userInteractionEnabled = YES;
}
- (void)DisableButton {
self.view.userInteractionEnabled = NO;
_btn_sync_outlet.enabled = NO;
_btn_sync_outlet.userInteractionEnabled = NO;
}
спасибо за комментарий я отключил UIButton правильно используя UIButtonOulet.enabled = NO даже в моем случае, когда я скрываю UIButton это registor нажмите событие –
@HARSHMAAN Попробуйте использовать код НОДА вместо (он вызывает отключение кода * * синхронно). – trojanfoe
спасибо за предложения он отлично работает при добавленной задержке для возврата назад [self performSelector: @selector (enableNow) withObject: nil afterDelay: 1.0]; –