无法在collectionview中创建单元格?

时间:2017-02-10 09:43:07

标签: ios iphone swift uitableview uicollectionview

我想在表格视图单元格中添加UICollectionView。为此,我创建了以下文件。

CollectionCell:

class CollectionCell: UICollectionViewCell {

  @IBOutlet weak var lblName: UILabel!
  @IBOutlet weak var imgCell: UIImageView!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

}

我还创建了 CollectionCell.xib

CollectionView.swift

class CollectionView: UIView {

  @IBOutlet weak var collectionview: UICollectionView!
  var arrItems:[String] = []
    /*
    // Only override draw() if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func draw(_ rect: CGRect) {
        // Drawing code
    }
    */
  func configureCollectionView()
  {
      collectionview.register(CollectionCell.self, forCellWithReuseIdentifier: "CollectionCell")
      collectionview.delegate = self
      collectionview.dataSource = self
  }
  func setCollectionViewDatasource(arrItems:[String])
  {
    self.arrItems = arrItems
    self.collectionview.reloadData()
  }
  static func initiateView()->CollectionView
  {
    let nib  = UINib(nibName: "CollectionView", bundle: nil)
    let view  = nib.instantiate(withOwner: nil, options: nil)[0] as! CollectionView
    return view
  }

}

extension CollectionView:UICollectionViewDelegate
{

}
extension CollectionView:UICollectionViewDataSource
{
  func numberOfSections(in collectionView: UICollectionView) -> Int {

    return 1

  }

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

    return arrItems.count
  }

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

    let cell:CollectionCell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! CollectionCell
    cell.lblName.text  = arrItems[indexPath.row]
    return cell
  }

}

我还创建了 CollectionView.xib

现在因为我想在tableview单元格中添加一个collectionview用于此目的,我创建了一个cutom tableview单元格类作为 CustomTableCell

class CustomTableCell: UITableViewCell {

    var view = CollectionView()
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
  override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    print("ceonstatructir init")
    // insitate a nib 
    view = CollectionView.initiateView()
    view.configureCollectionView()
    contentView.addSubview(view)
    view.setCollectionViewDatasource(arrItems: ["firest","second","thierd"])

  }

  required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }
    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
  func setDataSource(arrItems:[String])
  {
    //view.setCollectionViewDatasource(arrItems: arrItems)

  }

}

现在我创建了一个mainViewController来显示tableview上的数据,所以我已经crteated viewcontroller.swift

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

  @IBOutlet weak var tableview: UITableView!
  let sectionArray = ["First","Second","Third","Fourth","Fifth"]
  let collectionArray = [["First","Second","Third"],["First","Second","Third"],["First","Second","Third"],["First","Second","Third"],["First","Second","Third"]]
  override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    tableview.register(CustomTableCell.self, forCellReuseIdentifier: "TableCell")
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }
  func numberOfSections(in tableView: UITableView) -> Int {

    return sectionArray.count
  }
  func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

    return sectionArray[section]
  }
  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return 1
  }
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell:CustomTableCell = tableView.dequeueReusableCell(withIdentifier: "TableCell", for: indexPath) as! CustomTableCell
    return cell
  }
  func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

    let cell:CustomTableCell = cell as! CustomTableCell
    let dataSource = collectionArray[indexPath.section]
    cell.setDataSource(arrItems:dataSource)


  }
}

现在我正在尝试在创建tableviewcell时将数据源发送到我的collectionview。但是我在collectionview中的cellForItemAtIndexPath崩溃了。我在cellForItemAyIndexPath中将单元格设为nil。请告诉我是什么问题就在于它。

1 个答案:

答案 0 :(得分:2)

在Collectionview.swift中更改此功能

 func configureCollectionView()
  { 
    let nib = UINib(nibName: "CollectionCell", bundle: nil)
    collectionview.register(nib, forCellWithReuseIdentifier: "cell")

    collectionview.delegate = self
    collectionview.dataSource = self
  }

在cellforItemat中更改此行

let cell:CollectionCell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! CollectionCell

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionCell