2013-09-08 11 views
12

Sono nuovo nello sviluppo di iOS. Non so se questa domanda è già stata posta o meno, Ho provato a cercare la soluzione su StackOverflow ma non ho ottenuto alcun risultato.Come posso rilevare i tocchi su una particolare parte (sottostringa) di un UILabel?

Domanda:

Ho un UILabel chiamato myLabel con il testo: "Clicca qui per procedere"

Ora il problema è che voglio eseguire un'azione quando l'utente tocca solo "Click ".

So come utilizzare UITapGestureRecognizer, ma risponde all'intero UILabel. È possibile rilevare solo quando l'utente tocca solo sulla stringa "Click"?

+2

si può anche trovare da vicino alcune risposte potenzialmente utili in [questo domanda relativa (se non duplicata)] (http://stackoverflow.com/questions/1256887/clickable-links-in-uilabel). –

risposta

5

È possibile controllare la posizione del tocco per verificare se si trova sulla parola "Clic". Questo potrebbe non essere completamente preciso e potrebbe rompersi se si modifica il testo nell'etichetta.

Che cosa si potrebbe fare è prima ottenere la posizione del clic utilizzando:

CGPoint location = [gesture locationInView:gesture.view]; 

questo diventa il luogo del gesto nella vista.

Una volta fatto questo, è possibile avere la dimensione della parola "Click" hard-coded oppure è possibile creare un'etichetta identica all'etichetta gesto per ottenere la dimensione, come ad esempio:

UILabel *sizeLabel = //create label with same font. 
[sizeLabel setText:@"Click"]; 
float width = [sizeLabel sizeThatFits:CGSizeMake(MAXFLOAT,MAXFLOAT)].width; 

Puoi anche farlo quando crei l'etichetta vera e memorizzi questa larghezza in una variabile statica in modo che devi farlo una volta sola e non devi creare un'etichetta extra (cioè imposta il testo della tua vera etichetta su @ " Fare clic su ", ottenere la larghezza e quindi impostarlo sul testo reale).

Una volta che hai la larghezza, tu e la posizione del rubinetto, è possibile controllare se la parola "Click" è stato scelto dal confronto:

if (location.x < width) { 
    //Put your tap code in here. 
} 
+0

grazie ... Proverò questo .. –

+0

Ho [completo esempio nella mia risposta qui] (http://stackoverflow.com/a/29352519/168594) che mostra come farlo con 'UILabel',' UITapGestureRecognizer 'e' NSAttributedString' - nessuna sottoclasse necessaria. – zekel

Problemi correlati