UICollectionView внутри UITableViewCell - PullRequest
       7

UICollectionView внутри UITableViewCell

0 голосов
/ 10 декабря 2018

Я пытаюсь установить CollectionView внутри TableViewCell.Я прочитал множество вопросов, видео и видео, и пока у меня есть то, что кажется правильным методом, но мое коллекционное представление все еще не загружается в ячейку табличного представления.

Код:

import UIKit

class TheaterCell: UITableViewCell {

@IBOutlet var theaterName: UILabel!

@IBOutlet var theaterLocation: UILabel!

@IBOutlet var showtimesCollection: UICollectionView!

override func awakeFromNib() {
    super.awakeFromNib()

    showtimesCollection.delegate = self
    showtimesCollection.dataSource = self
    showtimesCollection.reloadData()

}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}

extension TheaterCell: UICollectionViewDataSource, UICollectionViewDelegate {

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    return 10

}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = showtimesCollection.dequeueReusableCell(withReuseIdentifier: "timeCell", for: indexPath) as! TimeCell

    cell.time.text = "1:00"

    return cell

}

}

Tableview загружается из ViewController и отображает его ячейки и элементы, но представление коллекции не загружается в ячейку.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Что я делаю, я использую раскадровку и настраиваю делегатов и источник данных из раскадровки, перетаскивая их в классы.

a) Установите делегатов и источник данных TableView в ViewController enter image description here

b) Установите делегатов и источник данных CollectionView в TableViewCell (TheatreCell) enter image description here

Код ViewController:

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}
}

extension ViewController:UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  return  1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let theaterCell:TheaterCell = tableView.dequeueReusableCell(withIdentifier: "TheaterCell", for: indexPath) as! TheaterCell
    theaterCell.reloadCollectionView()
    return theaterCell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 200
}
}

Код TheaterCell:

class TheaterCell: UITableViewCell {
@IBOutlet var showtimesCollection: UICollectionView!
override func awakeFromNib() {
    super.awakeFromNib()
}

func reloadCollectionView() -> Void {
    self.showtimesCollection.reloadData()
}
}

extension TheaterCell: UICollectionViewDataSource, UICollectionViewDelegate {

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 10        
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = showtimesCollection.dequeueReusableCell(withReuseIdentifier: "timeCell", for: indexPath) as! TimeCell
    cell.time.text = "1:00"
    return cell
}
}

Код TimeCell:

class TimeCell: UICollectionViewCell {
    @IBOutlet var time: UILabel!
}

Вот вывод:

enter image description here

ПРИМЕЧАНИЕ: ЕСЛИ ВЫ НЕ ИСПОЛЬЗУЕТЕ РАССКАЗЫ И ВЫ СДЕЛАЕТЕ КОЛЛЕКЦИЮ ИЛИ ТОЛЬКО ТАБЛИЦУ ИЗ КОДА, ТОГДА ВЫ ЗАРЕГИСТРИРУЕТЕ СВОЮ СОТОВУЮ ЭЛЕМЕНТУ КАК: А)TheaterCell должен быть зарегистрирован в классе ViewController B) TimeCell должен быть зарегистрирован в классе TheaterCell

0 голосов
/ 10 декабря 2018

Это работает для меня, я думаю, что проблема связана с тем, как вы регистрируете свою ячейку

class YourCell: UITableViewCell, UICollectionViewDelegate, UICollectionViewDataSource {

@IBOutlet weak var collectionView: UICollectionView!

override func awakeFromNib() {
    super.awakeFromNib()
    registerCell()
    self.collectionView.delegate = self
    self.collectionView.dataSource = self
}
func registerCell() {
    collectionView.register(TimeCell.self, forCellWithReuseIdentifier: "cell")
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 10
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! TimeCell
    cell.time.text = "1:00"
    return cell
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...