J'ai une vue qui contient deux vues. L'une de ces vues contient deux boutons et des étiquettes de texte. L'autre, avec alpha défini sur 0,25, a une UIActivityIndicatorView
pour informer l'utilisateur que l'application fonctionne et qu'il doit attendre jusqu'à ce qu'elle se termine. Si l'utilisateur touche un bouton alors que la UIActivityIndicatorView
tourne, lorsque la UIActivityIndicatorView
s'arrête, l'application mémorise l'action de l'utilisateur et y répond. Comment puis-je ignorer l'interaction utilisateur qui se produit pendant que la UIActivityIndicatorView
tourne?
Merci d'avoir lu.
P.D .: Comme est commenté dans ce fil , je préfère ne pas utiliser de solution modale.
EDITED:
J'utilise actuellement ce code et cela ne fonctionne pas correctement.
- (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];
}
J'ai trouvé ces méthodes très utiles:
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
Dans Swift 3.0 Pour désactiver l’interaction: -
UIApplication.shared.beginIgnoringInteractionEvents()
Pour restaurer l'interaction: -
UIApplication.shared.endIgnoringInteractionEvents()
[_button setUserInteractionEnabled:NO];
Cela devrait le désactiver, il suffit de définir OUI pour quand vous voulez que l'utilisateur le tapote.
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];
}
}
Pour désactiver un événement tactile dans une vue,
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
Pour activer l'événement tactile dans une vue
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
il suffit d'ajouter
[self.view setUserInteractionEnabled:NO];
avant le
[self.activityIndicator startAnimating];
et l'activer après
[self.activityIndicator stopAnimating];
[self.view setUserInteractionEnabled:YES];
@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)
}
ou vous utilisez du code, utilisez self.activityIndicator.animationDidStop pour déterminer quand exécuter votre travail
Utilisez SVProgressHUD WrapperClass Il a tellement d'options pour afficher ActivityIndicator
Pour le code source Cliquez ici!
[SVProgressHUD showWithMaskType: SVProgressHUDMaskTypeBlack];
utiliser la déclaration ci-dessus pour désactiver les touches d'arrière-plan
[SVProgressHUD rejeter]
Pour activer les touches de fond.
Vous pouvez désactiver/activer les boutons UIB en fonction de la valeur UIActivityIndicatorView
affichée ou non. Ou, si vous voulez simplement "ignorer l'interaction utilisateur" alors que le compteur est affiché, dans la méthode de gestion des boutons:
- (void)buttonTapped:(id)sender {
if ([spinner superview] != nil && [spinner isAnimating]) {
return;
}
// ... the rest of your code
}
Cet exemple suppose que lorsque vous masquez la UIActivityIndicatorView
, vous appelez l’un des suivants:
[spinner removeFromSuperview];
ou
[spinner stopAnimating];
A solution rapide : ajoute une vue transparente ou pseudo transparente couvrant l’ensemble de l’écran. Ajoutez votre indicateur d'activité en haut de cette vue. Lorsque la période d'attente se termine, supprimez les deux vues. Obtenez de l'inspiration .
Une meilleure solution, car vous ne pouvez pas masquer la totalité de l'écran dans toutes les situations, consiste à gérer l'état de l'application (ignorer les actions lorsque l'application est «occupée») et à activer/désactiver les boutons et autres contrôles appropriés en fonction de chaque application. Etat.
Bien que la réponse ait été donnée dans la réponse précédente, vous souhaitez juste ajouter à titre d'information "[self.activityIndicatorView setHidden: YES];" pas besoin d'appeler explicitement cette méthode, car startAnimating/stopAnimating s'en occupe déjà. Je suppose que vous utilisez la valeur par défaut de la propriété "hidesWhenStopped".