2012-10-22 8 views
17

Sto avendo due visualizzazioni di tabella differenti in due controller diversi. Ma le celle, che devo mostrare in esse, sembrano identiche. Ho creato una cella prototipo in una tabellaView e sottoclasse UiTableViewCell. Ora, se voglio usare la stessa cella in un controller diverso, come posso usarlo?Posso utilizzare una singola cella prototipo in più TableViews?

Se imposto il file customCell nel nuovo controller e lo deque utilizzando lo stesso identificatore fornito nello storyboard, non funzionerà. Dice fallimento

asserzione in - [UITableView _configureCellForDisplay: forIndexPath:]

terminazione app a causa di eccezione non identificata 'NSInternalInconsistencyException', la ragione: 'UITableView dataSource deve tornare una cella da tableView: cellForRowAtIndexPath: '

Quindi, chiaramente significa, la cella è nulla. Quindi, come posso istanziare la stessa cella dallo storyboard? È possibile o devo creare anche una CustomCell diversa per il nuovo tavolo?

risposta

24

K .. ho capito. Prima di tutto,

NON POSSO utilizzare una cella prototipo in due tabelle differenti. Tuttavia, I può utilizzare la stessa sottoclasse tableViewCell in due tabelle differenti.

Per raggiungerlo, è sufficiente copiare la cella prototipo da un controller e incollarla come cella prototipo dell'altro tableview. La classe della vista tabella incollata rimane la stessa. Basta cambiare il reuseIdentifier. e usarlo.

Modifica: Se la cella ha un'interfaccia utente abbastanza complicata, ha più senso creare xib separato per la sola cella. Quindi a livello di programmazione register the xib con la visualizzazione tabella. In questo modo, avrai solo una copia della cella e molto meglio a mantenerla quando ci sono cambiamenti nell'interfaccia utente.

+4

Per me, non è stato nemmeno necessario modificare il riutilizzatoreIdentificatore. –

+0

grazie funziona! – coolbeet

0

Se si crea una cella personalizzata in XIB, dovrebbe funzionare correttamente. Tuttavia, ho il sospetto che lo identifier della cella abbia causato il problema. Prova a modificare l'identificatore della cella per ogni controller di visualizzazione tabella.

Se non lo è, si potrebbe desiderare di pubblicare il codice sorgente

-2

Ho usato lo stesso UITableViewCell in diverse app. copia una TableViewCell nell'altra app. Entrambe le app hanno lo stesso layout e così via. Le app non appartengono allo stesso spazio di lavoro. La configurazione funziona bene, senza problemi o errori .. semplicemente non so se questa è una buona pratica.

1

È possibile utilizzare la stessa cella di prototipo in diversi controller di vista, è sufficiente deselezionarla dalla tabella del controller in cui è stata progettata.

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let viewControllerInWhichCellWasDefined = tabBarController?.viewControllers?[0] 
    let cell = viewControllerInWhichCellWasDefined.tableView.dequeueReusableCell(withIdentifier: "identifier", for: indexPath) 
    return cell 
}