Sono interessato ad avere una vista raccolta come parte di una cella di visualizzazione della raccolta, ma per qualche motivo non riesco a capire come questo sarebbe stato fatto. Dove implementerei i metodi necessari per la visualizzazione delle celle?UICollectionView in a UICollectionViewCell
risposta
C'è an article that Ash Furrow wrote che spiega come inserire un UICollectionView
all'interno di uno UITableViewCell
. È fondamentalmente la stessa idea quando lo si utilizza all'interno di un UICollectionViewCell
.
Questo è troppo tardi per questa risposta, ma potrebbe aiutare gli altri. Questo è un esempio di UICollectionView
all'interno di UICollectionViewCell
.
Iniziamo con un mainCollectionView
. Poi su ogni cella di questa collezione creare e inizializzare una nuova UICollectionView
e proprio luogo per farlo è in questo seguito delegato di UICollectionView
func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath)
ad esempio, ho inizializzare il MainCollectionViewCell
qui e poi MainCollectionViewCell
gestisce la logica di creare un nuova UICollectionView
guard let collectionViewCell = cell as? MainCollectionViewCell else { return }
collectionViewCell.delegate = self
let dataProvider = ChildCollectionViewDataSource()
dataProvider.data = data[indexPath.row] as NSArray
let delegate = ChildCollectionViewDelegate()
collectionViewCell.initializeCollectionViewWithDataSource(dataProvider, delegate: delegate, forRow: indexPath.row)
collectionViewCell.collectionViewOffset = storedOffsets[indexPath.row] ?? 0
Ecco l'inizializzatore su MainCollectionViewCell
che crea una nuova UICollectionView
func initializeCollectionViewWithDataSource<D: protocol<UICollectionViewDataSource>,E: protocol<UICollectionViewDelegate>>(dataSource: D, delegate :E, forRow row: Int) {
self.collectionViewDataSource = dataSource
self.collectionViewDelegate = delegate
let flowLayout = UICollectionViewFlowLayout()
flowLayout.scrollDirection = .Horizontal
let collectionView = UICollectionView(frame: self.bounds, collectionViewLayout: flowLayout)
collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseChildCollectionViewCellIdentifier)
collectionView.backgroundColor = UIColor.whiteColor()
collectionView.dataSource = self.collectionViewDataSource
collectionView.delegate = self.collectionViewDelegate
collectionView.tag = row
self.addSubview(collectionView)
self.collectionView = collectionView
collectionView.reloadData()
}
Spero che questo aiuti !!
Ho fatto un esempio per questo e inserito in github. Dimostra l'uso di UICollectionView
all'interno di UICollectionViewCell
.
https://github.com/irfanlone/Collection-View-in-a-collection-view-cell
Tutto è fatto programatically. Nessuno storyboard.
Ho aggiunto un UICollectionView all'interno del mio UICollectionViewCell. Mostro anche come aggiungere di nuovo un UICollectionViewCell all'interno del UICollectionView creato per avere questo risultato
import UIKit
class CategoryCell: UICollectionViewCell, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
private let cellId = "cell"
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
let appsCollectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
return collectionView
}()
func setupViews() {
backgroundColor = .blue
addSubview(appsCollectionView)
appsCollectionView.delegate = self
appsCollectionView.dataSource = self
appsCollectionView.register(AppCell.self, forCellWithReuseIdentifier: cellId)
addConstrainstWithFormat("H:|-8-[v0]-8-|", views: appsCollectionView)
addConstrainstWithFormat("V:|[v0]|", views: appsCollectionView)
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 5
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
return cell
}
}
class AppCell: UICollectionViewCell {
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupViews(){
backgroundColor = .red
}
}
mio UICollectionViewController
import UIKit
class FeaturedAppsController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
let cellId = "cell"
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
collectionView?.backgroundColor = .white
collectionView?.register(CategoryCell.self, forCellWithReuseIdentifier: cellId)
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 3
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(view.frame.width, 150)
}
}
Tutta la spiegazione può essere trovata ed è stato sviluppato da "Let Costruisci quell'app ": https://www.youtube.com/watch?v=Ko9oNhlTwH0&list=PL0dzCUj1L5JEXct3-OV6itP7Kz3tRDmma
- 1. UICollectionView zoom a schermo intero su UICollectionViewCell
- 2. Aggiungi altro UICollectionViewCell a un UICollectionView esistente
- 3. UICollectionView non contiene UICollectionViewCell in IB
- 4. Altezza uguale di UICollectionViewCell e UICollectionView
- 5. Come passare il gesto di pan a UICollectionVIew da UICollectionViewCell?
- 6. UICollectionView: l'oggetto UICollectionViewCell è sempre null in sizeForItemAtIndexPath
- 7. Prevenzione dell'aspetto animato di UICollectionViewCell durante la presentazione di UICollectionView
- 8. UICollectionViewCell sottoclasse init mai a corto
- 9. UICollectionViewCell Shake
- 10. UICollectionViewCell shadow color
- 11. get touch location di uicollectionviewcell
- 12. Animate UICollectionViewCell on Tap
- 13. Come auto-dimensionare UICollectionViewCell
- 14. I vecchi contenuti di UICollectionViewCell riutilizzati vengono visualizzati brevemente durante il riutilizzo delle celle in UICollectionView
- 15. UICollectionViewCell su UIButton Focus su tvOS
- 16. IOS: selezione della cella UICollectionView a lunga pressione
- 17. UIImageView animazione non funziona correttamente all'interno UICollectionViewCell
- 18. Come creare un'ombra per UICollectionViewCell
- 19. UICollectionView Not Appearing
- 20. Come ascoltare i tocchi utente per UICollectionViewCell in iOS?
- 21. Impossibile mettere a fuoco UICollectionViewCell all'interno di UITableViewCell
- 22. Animate UICollectionView sizeForItemAtIndexPath (Swift)
- 23. UICollectionView non scorre
- 24. Le celle non vengono visualizzate in UICollectionView?
- 25. Come creare e utilizzare UIcollectionView a livello di codice?
- 26. Aggiunta di una vista contenitore a UICollectionViewCell
- 27. Mancanza di proprietà di modifica e setEditing: animato: in UICollectionViewCell
- 28. tvOS: creazione dell'effetto di parallasse su UICollectionViewCell
- 29. UIScrollView all'interno di UICollectionViewCell non funziona
- 30. Più UICollectionView in un controller