2012-05-14 16 views
5

estoy usando el código MBProgressHUD:MBProgressHUD bloquea las interacciones con un UIScrollView cuando se muestran

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
    hud.mode = MBProgressHUDModeText; 
    hud.removeFromSuperViewOnHide = YES; 
    [hud hide:YES afterDelay:1]; 

Para el período que el HUD está siendo mostrado interacciones con un UIScrollView (que contiene el botón esto se llama desde) son discapacitado. No puedo hacer clic en otros botones ni desplazarme por UIScrollview.

¿Por qué MBProgressHUD bloquea mis interacciones con UIScrollview y cómo puedo deshabilitarlo?

+0

MBProgressHUD se usa cuando realiza tareas que debe esperar. Se supone que no necesitas interactuar con nada hasta que el proceso haya terminado. De todos modos, ¿está disparando su tarea en otro hilo ?. MBProgressHUD debe estar en el hilo principal y la tarea que desea ejecutar debe estar en otro hilo. –

+0

Es más simple que eso, solo quiero mostrar un breve aviso cuando se toca un botón. Pero las personas pueden querer cambiar los botones antes de que la animación desaparezca. –

Respuesta

17

estoy usando la versión 0.5 MBProgressHUD y simplemente establecer:

HUD.userInteractionEnabled = NO; 

Con esta interacción del usuario permitirá a la vista de los padres.

0

quizás porque los botones están en la misma vista que lo que está tratando de agregar la vista de progreso y cuando la vista de progreso está a la vista esta vista bloquea la vista de los botones que se agregan.

0

MBPregressHUD bloquea la interacción de abajo método

-(void)show:(BOOL)animated{ 
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
    ... 
    ... 
    ... 
} 

esta línea de código bloquea todas las interacciones dentro de su aplicación. Si desea mantener las interacciones, conducirlo a través de un BOOL nivel de la clase, se le puede llamar isModal y decidir si desea bloquear las interacciones o no

-(void)show:(BOOL)animated{ 
     if(isModal){ 
     [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
     } 
     ... 
     ... 
     ... 
    } 

Lo ideal es crear un nuevo 'init' método para tomar este BOOL como parámetro. La posible firma podría ser

- (id)initWithView:(UIView *)view isModal:(BOOL)modal; 

y luego inicializar el nivel de clase BOOL dentro de este método después de inicializar la vista. Se debe aplicar la misma condición en el método 'ocultar'.

feliz de codificación ... :)

+1

Quizás esta era una posible solución para este problema, sin embargo, en el momento de este post, la implementación del método de show de MBProgressHUD; ya no llama a 'beginIgnoringInteractionEvents', pero bloquea la UI de todos modos. I GUESS esto se debe a que MBProgressHUD es una subclase de UIView que no implementa ningún método de manejo de eventos (es decir, touchesBegan/Moved/Ended/Cancelled), rompiendo así la cadena de respuesta. – Tafkadasoh

Cuestiones relacionadas