无法在collectionview中创建单元格?

问题描述:

我想在表格视图单元格内添加一个UICollectionView。为此,我创建了以下文件。无法在collectionview中创建单元格?

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 
    } 

} 

我也创建收藏View.xib

现在我想添加为目的,我创建了一个对自定义的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细胞内的CollectionView上的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刚创建时,ectionview。但我碰到了collectionview.I中的cellForItemAtIndexPath崩溃。我在cellForItemAyIndexPath中获取单元格为零。请告诉我它有什么问题。

+0

你愿意给我演示?我会解决并返回给你 –

+0

我怎么发给你 – iOSGuy

+0

我发送请检查 – iOSGuy

在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 
+0

感谢您的帮助,但我没有看到任何collectionview单元格创建 – iOSGuy

+0

@iOSGuy只需写self.backgroundColor = UIColor.red 到收集单元,你看到3个单元格创建不同大小 –

+0

您需要通过收集单元标识单元格标识符 – iOSGuy