Отключение взаимодействия с пользовательским интерфейсом iPad до загрузки данных в основном потоке в бэкэнде

Я хочу отключить взаимодействие с пользовательским интерфейсом iPad до тех пор, пока данные не будут загружаться в основной поток в бэкэнде с использованием блоков.

Я загружаю изображения во время загрузки

-(void)downLoadImageData{ 
[self ShowActivityIndicator];

[iOSNetwork getImages:ImageID andEvent:eventID  
              onCompletion:^(NSString* result,NSError* error)
{
  dispatch_async(dispatch_get_main_queue(), ^{
    if(error)
    {
       [self stopFetch:@"Error while Processing"];
    }
    else
   {
      [[UIApplication sharedApplication] beginIgnoringInteractionEvents];
       [self stopFetch:result];

    }
   });
 }];
}

-(void) stopFetch:(NSString*) result{

  [self hideActivityIndicator];
   //after downloading completed
   [[UIApplication sharedApplication] endIgnoringInteractionEvents];
 }

person soumya    schedule 11.11.2014    source источник
comment
во время загрузки пользователь не вернется назад, иначе...   -  person Anbu.Karthik    schedule 11.11.2014
comment
Пользователь не должен возвращаться назад или выполнять некоторые действия, такие как действия с кнопками, такие как вход в систему, воспроизведение и т. д.   -  person soumya    schedule 11.11.2014
comment
Вам нужно показать какой-то код — что вы пробовали? По сути, вам просто нужно установить элементы управления пользовательского интерфейса на enabled=NO, пока загрузка не завершится.   -  person Paulw11    schedule 11.11.2014
comment
Я видел этот действительно хороший метод на днях: " title="не разрешать взаимодействие с пользователем, когда отображается индикатор активности"> stackoverflow.com/questions/5551432/   -  person Zhang    schedule 11.11.2014


Ответы (2)


если использовать весь вызов приложения

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

после завершения загрузки

[[UIApplication sharedApplication] endIgnoringInteractionEvents];

другой вариант

 [self.view setUserInteractionEnabled:NO];  

после завершения

  [self.view setUserInteractionEnabled:YES]; 

Еще один вариант

  self.navigationController.navigationBar.userInteractionEnabled=NO;
  // perform other events also userInteractionEnabled=NO; 

после завершения

  self.navigationController.navigationBar.userInteractionEnabled=YES;
  // perform other events also userInteractionEnabled=NO; 

в вашем вопросе

  -(void)downLoadImageData{ 
[self ShowActivityIndicator];


 [[UIApplication sharedApplication] beginIgnoringInteractionEvents];   // call here
[iOSNetwork getImages:ImageID andEvent:eventID  
              onCompletion:^(NSString* result,NSError* error)
{
  dispatch_async(dispatch_get_main_queue(), ^{
    if(error)
    {
       [self stopFetch:@"Error while Processing"];
    }
    else
   {

       [self stopFetch:result];

       // not here

    }
   });
 }];
}
person Anbu.Karthik    schedule 11.11.2014
comment
счастливого дня, мой друг - person Anbu.Karthik; 11.11.2014

Для этого вы можете использовать MBProgressHud. Вам нужно добавить файлы MBProgressHUD в проект.

        AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
        self.HUD = [[MBProgressHUD alloc] initWithWindow:appDelegate.window];
        [appDelegate.window addSubview:self.HUD];

        - (void)showHUDWithText:(NSString *)labelText{
            if (_isHUDAlreadyInProgress) {
                return;
            }
            _isHUDAlreadyInProgress = TRUE;
            [_HUD.superview bringSubviewToFront:_HUD];
            self.HUD.labelFont = [UIFont systemFontOfSize:13.0];
            //self.HUD.labelText = labelText;
            [self.HUD show:TRUE];
           }
- (void)hideHUD{
    _isHUDAlreadyInProgress = FALSE;
    [self.HUD hide:TRUE];
}
person Vipul    schedule 11.11.2014
comment
Вы можете использовать это руководство для MBProgressHud. - person Vipul; 11.11.2014