5

Ok, quindi quello che sto cercando di fare è creare un visualizzatore di documenti che è simile questa immagine: enter image description herepersonalizzato QLPreviewController o UIDocumentInteractionController in grado di intercettare gli eventi touch

Fondamentalmente quello che dovrebbe accadere è, quando lo schermo viene toccato da nessuna parte , appariranno la barra superiore e inferiore. Tocca di nuovo e scompaiono.

Ho sottoclasse QLPreviewController e sono riuscito a sfruttare la barra di navigazione (in alto) che già viene fornita con QLPreviewController. Funziona bene Ora ho bisogno di ottenere la barra in basso da visualizzare ogni volta che viene visualizzata la barra superiore. Posso aggiungere uno UIToolbar alla fine della pagina, ma ho bisogno di intercettare gli eventi di tocco in modo da poter nascondere/mostrare la barra in basso. Non riesco a capire come farlo funzionare. Ho provato ad aggiungere un UITapGestureRecognizer alla sottoclasse QLPreviewController per fortuna. Ho anche provato a creare una sovrapposizione UIView che ha un UITapGestureRecognizer ma che impedisce al modulo utente di interagire con il documento sottostante.

Qualcuno ha qualche idea su come farlo? Grazie in anticipo!

risposta

3

Ok, ho scoperto quale fosse il problema con lo UITapGestureRecognizer. È necessario impostare il delegato per sé, e quindi ignorare la funzione

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

e tornare di sì. Così nel mio QLPreviewController sottoclasse, ho implementato l'UIGestureRecognizerDelegate, e nel viewWillAppear:

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

Poi basta:

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

In questo modo, il QLPreviewController sarà ancora ricevere tutti gli altri eventi touch non toccare in modo che l'utente può comunque interagire con il documento

0

sottoclasse QLPreviewController e poi ignorare

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

Questo è tutto!

+0

Purtroppo questa soluzione non sembra essere una soluzione valida dal momento che Apple la considera un'API privata. vedi http://stackoverflow.com/questions/6091027/qlpreviewcontrollers-view#comment34156919_22231721 – Lifely

Problemi correlati