В настоящее время я пытаюсь выяснить, как получить UITableView с UICollectionView для правильного отображения следующего набора данных внутри UICollectionViews.
[["food 1", "food 2", "food 3"], ["car 1", "car 2", "car 3", "car 4"], ["house 1", "house 2"], ["person 1", "person 2", "person 3", "person 4"], ["kid 1", "kid 2", "kid 3", "kid 4", "kid 5"]]
У меня заголовки работают нормально, как показано ниже.
Однако, когда я прокручиваю по горизонтали внутри UICollectionViews, все данные будут перепутаны. Это можно увидеть на скриншотах выше и ниже, потому что я прокрутил вверху UICollectionView.
Вот следующий код.
ViewController
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
let section = ["foods","cars","houses","persons","kids"]
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = 122
tableView.tableFooterView = UIView()
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return self.section[section]
}
func numberOfSections(in tableView: UITableView) -> Int {
return section.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "tableViewCell", for: indexPath) as? TableViewCell
{
data = [["food 1", "food 2", "food 3"], ["car 1", "car 2", "car 3", "car 4"], ["house 1", "house 2"], ["person 1", "person 2", "person 3", "person 4"], ["kid 1", "kid 2", "kid 3", "kid 4", "kid 5"]][indexPath.section]
return cell
}
return UITableViewCell()
}
}
CollectionViewCell
class CollectionViewCell: UICollectionViewCell {
@IBOutlet weak var dataLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
}
Наконец, файл TableViewCell, который заполняет данные UICollectionView.
var data = [String]()
class TableViewCell: UITableViewCell, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
@IBOutlet weak var collectionView: UICollectionView!
let collCount = Int()
//var imageArray = [[String]] ()
override func awakeFromNib() {
super.awakeFromNib()
self.collectionView.delegate = self
self.collectionView.dataSource = self
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 3 //should return the amount of data per array
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let cell: CollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath) as? CollectionViewCell
{
cell.dataLabel.text = data[indexPath.item]
return cell
}
return UICollectionViewCell()
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize{
let size = CGSize(width: 256, height: 100.5)
return size
}
}
Как вы также можете видеть в приведенном выше коде, у меня также возникает проблема с отображением правильного количества элементов в разделе для UICollectionView.
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 3 //should return the amount of data per array in the array of data
}
Данные ...
[["food 1", "food 2", "food 3"], ["car 1", "car 2", "car 3", "car 4"], ["house 1", "house 2"], ["person 1", "person 2", "person 3", "person 4"], ["kid 1", "kid 2", "kid 3", "kid 4", "kid 5"]]
... может в конечном итоге иметь больше данных, чем то, что в данный момент дается. Например, индекс 0 в этом массиве может иметь 4 вместо текущего 3.
Напомним, у меня возникают проблемы с отображением данных в ячейках представления коллекции, а также с настройкой количества элементов на раздел таким образом, чтобы это автоматически корректировалось при добавлении дополнительных данных.
Спасибо за ваше время, я действительно ценю это.