Подтвердить что ты не робот

Не разрешать взаимодействие пользователя, когда вид индикатора активности

У меня есть представление, которое содержит два представления. Один из этих представлений содержит две кнопки и некоторые текстовые метки. Другой, с альфой, установленным на 0.25, имеет UIActivityIndicatorView, чтобы сообщить пользователю, что приложение работает, и он должен подождать, пока он не закончится. Если пользователь прикасается к кнопке, когда UIActivityIndicatorView вращается, когда UIActivityIndicatorView останавливается, приложение запоминает действие пользователя и отвечает на него. Как я могу отказаться от пользовательского взаимодействия, которое происходит во время вращения UIActivityIndicatorView?

Спасибо за чтение.

P.D.: Как говорится в этой теме, я предпочитаю не использовать какое-либо модальное решение.

Редакция:

В настоящее время я использую этот код, и он не работает правильно.

- (void)viewDidAppear:(BOOL)animated {

  // The view appears with an UIActivityIndicatorView spinning.
  [self showResults]; // The method that takes a long time to finish.
  [self.activityIndicator stopAnimating];
  // When the showResults method ends, the view shows the buttons to the user.
  [self.activityIndicatorView setHidden:YES];
  [self.menuButton setEnabled:YES];
  [self.menuButton setUserInteractionEnabled:YES];
  [self.playButton setEnabled:YES];
  [self.playButton setUserInteractionEnabled:YES];
  [self.view setUserInteractionEnabled:YES];
  [self.interactionView setUserInteractionEnabled:YES];
}
4b9b3361

Ответ 1

Я нашел эти методы очень полезными:

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

[[UIApplication sharedApplication] endIgnoringInteractionEvents];

Ответ 2

[_button setUserInteractionEnabled:NO];

Чтобы отключить его, просто установите YES, когда вы хотите, чтобы пользователь нажал его.

BOOL i_am_ready_to_submit = NO;

-(void)action_finished{

[self.activityIndicator stopAnimating];

i_am_ready_to_submit = YES;

}

-(IBAction)submit_button{

if(i_am_ready_to_submit){

[self submit];

}

}

Ответ 3

Чтобы отключить событие касания в представлении,

[[UIApplication sharedApplication] beginIgnoringInteractionEvents];

Чтобы включить событие касания в представлении

[[UIApplication sharedApplication] endIgnoringInteractionEvents];

Ответ 4

просто добавьте

[self.view setUserInteractionEnabled:NO];  

перед

[self.activityIndicator startAnimating];  

и снова его можно использовать после

[self.activityIndicator stopAnimating];
[self.view setUserInteractionEnabled:YES]; 

Ответ 5

В Swift 3.0 Отключить взаимодействие: -

UIApplication.shared.beginIgnoringInteractionEvents()

Чтобы восстановить взаимодействие: -

UIApplication.shared.endIgnoringInteractionEvents()

Ответ 6

Использовать SVProgressHUD WrapperClass У него есть так много вариантов, чтобы показать ActivityIndicator
Исходный код Нажмите здесь!

[SVProgressHUD showWithMaskType: SVProgressHUDMaskTypeBlack];


использовать инструкцию выше, чтобы отключить фоновые штрихи

[Отклонение SVProgressHUD]

Чтобы включить фоновые штрихи.

Ответ 7

@IBAction func yourButtonPressed(sender: UIButton) {
if self.activityIndicator.isAnimating() {
//remember the action user asked of you using the sender
} else {
//do your stuff
return
}
yourButtonPressed(yourButton)
}

или использовать код self.activityIndicator.animationDidStop, чтобы определить, когда запускать ваши вещи.

Ответ 8

A быстрое решение: добавьте прозрачный или псевдо прозрачный вид, который охватывает весь экран. Добавьте свой индикатор активности поверх этого представления. Когда закончится период ожидания, удалите оба вида. Получите вдохновение.

Лучшее решение, потому что вы не можете скрыть весь экран во всех ситуациях, это управлять состоянием приложения (игнорировать действия, когда приложение "занято" ) и отключать/включать соответствующие кнопки и другие элементы управления в зависимости от в каждом состоянии приложения.

Ответ 9

Вы можете отключить/включить UIButtons на основе отображаемого UIActivityIndicatorView или нет. Или, если вы просто хотите "отказаться от пользовательского взаимодействия", пока отображается счетчик, в методе обработчика кнопок:

- (void)buttonTapped:(id)sender {
    if ([spinner superview] != nil && [spinner isAnimating]) {
        return;
    }
    // ... the rest of your code
}

В этом примере предполагается, что когда вы скрываете UIActivityIndicatorView, вы вызываете один из:

[spinner removeFromSuperview];

или

[spinner stopAnimating];

Ответ 10

Хотя ответ отвечает в более раннем ответе, как и для добавления в целях информации "[self.activityIndicatorView setHidden: YES]; нет необходимости вызывать этот метод явно, потому что startAnimating/stopAnimating уже позаботится об этом. Я предполагаю, что вы используете значение по умолчанию свойства" hidesWhenStopped".