2015-07-23 24 views
7

Ho una tabellaView con righe che devono essere raccolte in modo orizzontale.UICollectionView all'interno di TableView non popolano le celle?

Le mie cellule Tableview hanno un unico CollectionView al loro interno, e poi li ho istanziare come questo:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell: MyTableViewCell = tableView.dequeueReusableCellWithIdentifier("MyTableViewCell", forIndexPath: indexPath) as! MyTableViewCell 
    let nibName = UINib(nibName: "CollectionCell", bundle: nil) 
    cell.collectionView.registerNib(nibName, forCellWithReuseIdentifier: "CollectionCell") 
    cell.collectionView.dataSource = self 
    cell.collectionView.delegate = self 

    return cell 
} 

Sto cercando di utilizzare una vista tabella fila di auto-altezza, e credo che questo è ciò che potrebbe essere causa di problemi Come utilizzo UITableViewAutomaticDimension con le viste di raccolta interne?

+2

Probabilmente è necessario chiamare 'reloadData' dopo aver impostato il delegato e l'origine dati – Qazi

+0

@Qazi l'ha fatto in cellForRowAtIndexPath, nessun effetto. –

+0

scusa non ero chiaro, quindi stai chiamando il 'reloadData' sulla raccolta di raccolta a destra e non su TableView? – Qazi

risposta

7

Questo è in Objective-C, ma funziona per me:

i. Nel file .m della cella personalizzata registrare il pennino UICollectionViewCell e specificare i dettagli del layout (dimensioni, spaziatura ecc.).

ii. nel VC che tiene tableView sua .m effettuare le seguenti operazioni in cellForRowAtIndexPath

MyTableViewCell *cell = (MyTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"MyTableViewCellId" forIndexPath:indexPath]; 

    cell.collectionView.delegate = self; 
    cell.collectionView.dataSource = self; 
    cell.collectionView.tag = indexPath.row; 

    [cell.collectionView reloadData]; 

iii. È possibile utilizzare il tag dello UICollectionView nei metodi delegato per popolare le informazioni corrette

Hop questo aiuta.

+0

Sto provando a utilizzare una riga di visualizzazione tabella altezza automatica e penso che questo potrebbe causare problemi. Come utilizzo UITableViewAutomaticDimension con le viste di raccolta interne? –

+1

Questo funziona. È necessario assicurarsi che l'itemSize nel layout sia impostato e che i vincoli di esecuzione automatica della cella che contiene la vista di raccolta specifichino un'altezza quando la tableview è impostata su AutomaticDimension –

+0

@StefanKendall hai assolutamente ragione, mi dispiace dimenticarti di includerlo .. ho appena aggiunto la risposta – trdavidson

0

Prova ad aggiungere - cell.setTranslatesAutoresizingMaskIntoConstraints (falsi) - vedi sotto

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell: MyTableViewCell = tableView.dequeueReusableCellWithIdentifier("MyTableViewCell", forIndexPath: indexPath) as! MyTableViewCell 
    let nibName = UINib(nibName: "CollectionCell", bundle: nil) 
    cell.collectionView.registerNib(nibName, forCellWithReuseIdentifier: "CollectionCell") 
    cell.collectionView.dataSource = self 
    cell.collectionView.delegate = self 
    cell.setTranslatesAutoresizingMaskIntoConstraints(false) 

    return cell 
} 

Vedi https://www.captechconsulting.com/blogs/ios-8-tutorial-series-auto-sizing-table-cells per qualche informazione in più.

Problemi correlati