UITableViewCell内部的UICollectionView

时间:2018-12-10 00:30:35

标签: ios swift uitableview uicollectionview

我正在尝试在TableViewCell内设置CollectionView。我已经通读了很多有关堆栈问题,tut和视频的手册,到目前为止,我已经有了看似正确的方法,但是我的集合视图仍然没有加载到表格视图单元格中。

代码:

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 :(得分:2)

这对我有用,我认为问题来自您注册手机的方式

X Y C|Z D
-----+---
0 0 0|0 0
0 0 1|1 0
0 1 0|1 0
0 1 1|0 1
1 0 0|1 0
1 0 1|0 1
1 1 0|0 1
1 1 1|1 1

答案 1 :(得分:0)

我做什么,我使用情节提要,并通过拖到类中来设置情节提要的委托和数据源。

a)将TableView的委托和数据源设置为ViewController enter image description here

b)将CollectionView的委托和数据源设置为TableViewCell(TheaterCell) 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

注意:如果您不使用故事板,而仅使用代码制作COLLECTIONVIEW或桌子,那么您必须将自己的手机注册为: A)TheatreCell必须注册到ViewController类中 B)TimeCell必须注册到TheaterCell类中