objective-c - tecnicas - sistema de recomendacion python
No permitir la interacción del usuario cuando la vista del indicador de actividad es visible (10)
Tengo una vista que contiene dos vistas. Una de esas vistas contiene dos botones y algunas etiquetas de texto. El otro, con alfa establecido en 0.25, tiene un UIActivityIndicatorView
para decirle al usuario que la aplicación está funcionando y debe esperar hasta que finalice. Si el usuario toca un botón mientras el UIActivityIndicatorView
está girando, cuando el UIActivityIndicatorView
detiene, la aplicación recuerda la acción del usuario y le responde. ¿Cómo puedo descartar la interacción del usuario que se produce mientras el UIActivityIndicatorView
está girando?
Gracias por leer.
PD: Like está comentado en este hilo , prefiero no usar ninguna solución modal.
EDITADO:
Actualmente estoy usando este código y no funciona bien.
- (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];
}
Aunque la respuesta se responde en una respuesta anterior, solo quiero agregarla con fines informativos "[self.activityIndicatorView setHidden: YES];" No es necesario llamar a este método explícitamente, porque startAnimating / stopAnimating ya se encarga de esto. Supongo que está utilizando el valor predeterminado de la propiedad "hidesWhenStopped".
En Swift 3.0 para deshabilitar la interacción: -
UIApplication.shared.beginIgnoringInteractionEvents()
Para restaurar la interacción: -
UIApplication.shared.endIgnoringInteractionEvents()
He encontrado estos métodos muy útiles:
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
Para desactivar el evento táctil en una vista,
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
Para habilitar el evento táctil en una vista
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
Puede deshabilitar / habilitar los UIButtons basados en el UIActivityIndicatorView
se muestra o no. O, si solo desea "descartar la interacción del usuario" mientras se muestra la flecha giratoria, en el método del controlador de botones:
- (void)buttonTapped:(id)sender {
if ([spinner superview] != nil && [spinner isAnimating]) {
return;
}
// ... the rest of your code
}
Este ejemplo asume que cuando oculta el UIActivityIndicatorView
, llama a uno de:
[spinner removeFromSuperview];
o
[spinner stopAnimating];
Una solución rápida : agregue una vista transparente o pseudo transparente que cubra toda la pantalla. Añade tu indicador de actividad en la parte superior de esta vista. Cuando finalice el período de espera, elimine ambas vistas. Obtener un poco de inspiración .
Una solución mejor, porque no puede ocultar toda la pantalla en todas las situaciones, es administrar el estado de la aplicación (ignorar acciones cuando la aplicación está ''ocupada'') y deshabilitar / habilitar los botones apropiados y otros controles dependiendo de cada aplicación. estado.
Use SVProgressHUD WrapperClass Tiene tantas opciones para mostrar ActivityIndicator
Para el código fuente haga clic aquí!
[SVProgressHUD showWithMaskType: SVProgressHUDMaskTypeBlack];
utilizar la declaración anterior para deshabilitar los toques de fondo
[SVProgressHUD despide]
Para habilitar los toques de fondo.
solo agrega
[self.view setUserInteractionEnabled:NO];
antes de
[self.activityIndicator startAnimating];
y volver a habilitarlo despué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)
}
o tu código usa self.activityIndicator.animationDidStop para determinar cuándo ejecutar tus cosas
[_button setUserInteractionEnabled:NO];
Eso debería deshabilitarlo, simplemente configure SÍ para cuando desee que el usuario lo toque.
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];
}
}