2016-06-04 31 views
7

Sto cercando di aggiungere etichette in Swift, che vengono aggiunte in un ciclo. Quindi desidero aggiungere un evento "TapGesture" a ciascuno di essi man mano che vengono aggiunti. Funziona, ma il problema è che la funzione chiamata prende i dati dall'etichetta da usare quando viene cliccato, ma l'etichetta è stata ridefinita da allora e prende i dati dall'ultimo aggiunto, non quello che è stato cliccato. Come posso rendere ognuno unico?Come "aggiungiTarget" a UILabel in Swift

self.label.attributedText = self.myMutableString 
let tapGesture = UITapGestureRecognizer(target: self, action: handleTap(label)) 
self.label.userInteractionEnabled=true 
self.label.addGestureRecognizer(tapGesture) 
self.label.font = UIFont.boldSystemFontOfSize(28) 
self.label.sizeToFit() 
self.label.center = CGPoint(x: screenWidth, y: top) 
if(kilom>=30||self.located==false){ 
    self.scroller.addSubview(self.label) 
    if(device=="iPhone"||device=="iPhone Simulator"){ 
     top = top+80 
    } 
    else{ 
     top = top+140 
    } 
} 

Il codice sotto è il sistema di riconoscimento gesto che ottiene i dati dell'etichetta e li utilizza:

func handleTap(sender:UILabel){ 
    var a = self.label.text 
    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 

    let resultViewController = storyBoard.instantiateViewControllerWithIdentifier("displayer") 

    self.presentViewController(resultViewController, animated: true, completion: nil) 
} 
+0

Va bene grazie. –

+0

Dal codice che hai postato, sembra che tu abbia solo un'etichetta. Tu modifichi i suoi attributi ma non ne crei uno nuovo (a meno che non sia nel codice che non hai incluso). –

risposta

6

La funzione del gestore di UITapGestureRecognizer viene passato il UITapGestureRecognizer come sender. È possibile accedere allo view a cui è collegato con la proprietà view. Vorrei suggerire qualcosa di simile:

func handleTap(sender: UITapGestureRecognizer) { 
    guard let a = (sender.view as? UILabel)?.text else { return } 

    ... 
} 

Sarà inoltre necessario modificare la firma del selettore:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap)) 

o per le versioni precedenti di Swift:

let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:") 
+0

Ha funzionato perfettamente. Grazie! –

+0

Ora ho il problema di aggiungere un valore per una chiave non definita per ogni etichetta? Sto cercando di memorizzare i dati, ma continuo a ricevere un errore che dice "UncaughtNSException" e "questo non è un reclamo di codifica chiave" –

+0

Che cosa stai cercando di fare? Aggiorna il testo dell'etichetta? Puoi mostrare la riga di codice che ti dà l'errore? – vacawama