2014-08-28 3 views
6

Sto provando a creare un'app per iOS 8, utilizzando swift. L'obiettivo qui è di creare una sorta di feed di notizie. Questo feed mostra i post degli utenti, che seguono un determinato schema.Accesso a diverse viste all'interno di UITableViewCell tramite tag in Swift

Ho pensato di utilizzare UITableView in cui ogni cella segue un layout personalizzato. Il problema si presenta quando provo ad accedere a un'etichetta di testo al suo interno. Cerco di accedervi con il suo tag, ma quando lo faccio, l'intera app si blocca. L'errore riportato è "Swift dynamic cast failed", e sto utilizzando il seguente codice per accedere alla vista:

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { 

    let cellId: String = "cell" 

    var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellId) as UITableViewCell 

    if let ip = indexPath{ 
     cell.textLabel.text = myData[ip.row] as String 
     var lbl = cell.contentView.viewWithTag(0) as UILabel 
     lbl.text = "ola" 
    } 

    return cell 
} 

sto facendo qualcosa di sbagliato? Grazie in anticipo!

+0

non riesco a vedere il codice dal quale si effettua impostando il tag. – avismara

+0

Ho già provato ad usare altri valori per i tag, ma succede sempre la stessa cosa – pavlag

+0

@Avismara Lo sto facendo nel builder dell'interfaccia ... Sto sbagliando? – pavlag

risposta

8

Penso che il Problema sia il Tag 0. Tutte le Viste hanno il valore di default 0. Quindi prova un altro valore di tag.

+0

L'ho già provato. la stessa cosa accade .. – pavlag

+0

i quale linea è il problema: var lbl = cell.contentView.viewWithTag (0) come UILabel? Hai impostato il tag corretto in IB? – derdida

+0

sì, l'ho fatto. è strano – pavlag

2

Appena affrontato lo stesso problema. La soluzione era di cambiare tag in 10 e 20. Ho usato 1 e 2 prima. Qualcuno è a conoscenza di una serie di tag che viene utilizzata dal sistema?

Quindi il mio 'cellForRowAtIndexPath' per un tavolo con un'immagine e un marchio per riga assomiglia a questo ora:

internal func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    if let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier") as? UITableViewCell { 
     (cell.contentView.viewWithTag(10) as UIImageView).image = IMAGES[indexPath.row] 
     (cell.contentView.viewWithTag(20) as UILabel).text = LABELS[indexPath.row] 

     return cell 
    } else { 
     NSLog("Prototype did not work") 
     return UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "errorIdentifier") 
    } 
} 
+0

Sì, lo stesso problema affrontato qui. – Abhijit

Problemi correlati