11

Sto tentando di utilizzare l'oggetto UITapGestureRecognizer che può essere trovato in Interface Builder. Ho trascinato un singolo "UITapGestureRecognizer" dalla libreria degli oggetti su una singola vista xib. Creo quindi un metodo IBAction da questo gesto di tocco, per un semplice test, sto semplicemente stampando un messaggio "NSLog" sulla console quando c'è un tocco sulla vista. Ho eseguito questo, e il metodo tap non viene chiamato. Faccio clic destro sulla vista in IB e ho notato che c'è un avviso "!" su "Collezioni di Outlook" della vista che vedo:Problemi con UITapGestureRecognizers in Interface Builder

Outlook Collections 
gestureRecognizers - Tap Gesture Recognizer (!) 

Gli stati di allarme: UIView does not have an outlet collection named gestureRecognizers.

Che cosa devo fare per rimediare a questo?

+0

Sono andato attraverso lo stesso esercizio e funziona per me. Sto usando xCode 4.2 con iOS SDK5. Il messaggio di avviso è presente ma stampa ancora il messaggio NSLog. –

+0

Hai idea di cosa sia l'avviso o di come possa essere risolto? – 5StringRyan

+1

Sospetto che gestureRecognizers non sia definito come IBOutlet, ma un po 'come quando rilasciamo il controllo gestureRecognizer in IB e sa come collegarlo per noi. –

risposta

0

Dai uno sguardo allo this.

In particolare la schermata della configurazione della presa. Speriamo che questo possa aiutare.

1

Due cose da verificare: il controller di visualizzazione (quello che contiene l'UIView) implementa il protocollo UIGestureRecognizerDelegate?

Una volta implementato UIGestureRecognizerDelegate, assicurarsi di aver impostato la proprietà delegato del gestore dei gesti al controller della vista. Ho usato uno storyboard per realizzare la connessione.

Faccio questo e non ottengo alcun errore (IOS 5.1, xCode 4.3).

1

Ho fatto questo per aggiungere un Tap Gesture Doppio alla mia barra di navigazione, interamente in codice e l'ho trovato molto facile da usare ....

In considerazione fatto carico ...

//Add double tap gesture to Navbar 
UITapGestureRecognizer* tapRecon = [[UITapGestureRecognizer alloc] 
            initWithTarget:self action:@selector(navigationBarDoubleTap:)]; 
tapRecon.numberOfTapsRequired = 2; 
[self.navigationController.navigationBar addGestureRecognizer:tapRecon]; 

Allora ho un metodo ...

#pragma mark - Auto Refresh Method 
- (void)navigationBarDoubleTap:(UIGestureRecognizer*)recognizer { 
     //Do Stuff Here 
} 

Forse potresti adattare questo.

Plasma

0

L'avviso non dovrebbe essere un problema. È lì solo perché puoi aggiungere più riconoscitori di gesti come una raccolta IBOutlet, ma questo non è richiesto.

Attiva gli zombi nello schema per ottenere messaggi di errore migliori durante il debug. Nel mio caso il controller Vista che stavo cercando di inviare messaggi con il mio gestore di gesti non è stato istanziato in Interface Builder.

Inoltre, non è necessario implementare il protocollo delegato e funzionerà su qualsiasi UIView.

4

Penso che tu non abbia cablato correttamente il UITapGestureRecognizer al tuo codice.

Quando si rilascia uno UITapGestureRecognizer su xib Xcode, vengono automaticamente effettuate le connessioni di riferimento della presa necessarie.

È necessario solo creare un metodo IBAction nel codice e quindi collegarlo al selettore di U ITapGestureRecognizer inserito in xib.

Ho allegato schermate di riferimento.

enter image description here

enter image description here

Spero che questo aiuti !!

4

Mr.La soluzione anonima è corretta. Non è necessario implementare il delegato nel controller della vista o impostarlo. Tuttavia, è necessario verificare che l'interazione utente abilitata sia selezionata (nella finestra delle proprietà sulla destra), soprattutto se si sta collegando il riconoscimento a un'etichetta.

2

Mi ero dimenticato di controllare che l'interazione utente debba essere controllata per le viste che il rilevatore di gesti è stato aggiunto.

Problemi correlati