5

Ok, así que lo que estoy tratando de hacer es crear un visor de documentos que es similar esta imagen: enter image description hereQLPreviewController personalizado o UIDocumentInteractionController que puede interceptar eventos de toque

Básicamente lo que debe suceder es decir, cuando la pantalla se toca en cualquier lugar , la barra superior e inferior aparecerá. Toca de nuevo y desaparecen.

He subclase QLPreviewController y he logrado aprovechar la (superior) barra de navegación que ya viene con QLPreviewController. Esto funciona bien Ahora necesito que aparezca la barra inferior siempre que se muestre la barra superior. Puedo agregar un UIToolbar al final de la página, pero necesito interceptar los eventos táctiles para poder ocultar/mostrar la barra inferior. Parece que no puedo encontrar la manera de hacerlo funcionar. Traté de agregar un UITapGestureRecognizer a la vista de la subclase QLPreviewController en sí a la mala suerte. También intenté crear una superposición UIView que tiene un UITapGestureRecognizer pero que impedía al usuario interactuar con el documento que se encuentra debajo.

¿Alguien tiene alguna idea sobre cómo hacer esto? ¡Gracias por adelantado!

Respuesta

3

Bien, descubrí cuál era el problema con el UITapGestureRecognizer. Es necesario configurar el delegado a sí mismo y, a continuación, reemplace la función

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

y volver sí. Así que en mi subclase QLPreviewController, he implementado el UIGestureRecognizerDelegate, y en el viewWillAppear:

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(documentTapped:)]; 
tapGesture.cancelsTouchesInView = NO; 
tapGesture.delegate = self; 
[self.view addGestureRecognizer:[tapGesture autorelease]]; 

Después, simplemente:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    return YES; 
} 

De esta manera, el QLPreviewController seguirá recibiendo todos los otros eventos de toque no golpear ligeramente que el usuario puede interactuar con el documento

0

Subclase QLPreviewController y luego anular

-(void)contentWasTappedInPreviewContentController:(id)item {} 

Eso es todo!

+0

Lamentablemente, esta no parece ser una solución valiosa ya que Apple la considera una API privada. ver http://stackoverflow.com/questions/6091027/qlpreviewcontrollers-view#comment34156919_22231721 – Lifely

Cuestiones relacionadas