麻烦出局uicollectionview细胞(swift 3)

时间:2017-05-17 07:25:18

标签: ios swift xcode uicollectionview

在我的uicollectionview中,我遇到了多个单元格出错的问题。 有人可以从注册到出列一步一步地解释这个过程。我在网上找不到任何关于在一个集合视图中加载两个或更多uicollectionview单元格的内容。同样,这是基于来自coreadata的变量在单个集合视图中加载多种类型的单元格。

这是我到目前为止所拥有的。

这是我注册单元格的地方

    collectionView?.register(ShareCell.self, forCellWithReuseIdentifier: cellId)
    collectionView?.register(ShareCellMedia.self, forCellWithReuseIdentifier: mediaCellId)

这是索引路径

项目的单元格
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath :
    IndexPath) -> UICollectionViewCell {

    let friend = fetchedResultsController.object(at: indexPath) as! Friend
    if (friend.lastMessage?.hasImage)! == true {
        let mediaCell = collectionView.dequeueReusableCell(withReuseIdentifier: mediaCellId, for: indexPath) as!
        ShareCellMedia
        mediaCell.cell = friend.lastMessage
        return mediaCell

    }else{


        let regularCell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as!
        ShareCell
        regularCell.cell = friend.lastMessage
        return regularCell
    }

}

2 个答案:

答案 0 :(得分:0)

如果您使用的是原型静态单元格,则无需注册单元格,或者如果您使用的是带有xib的单元格,则可以像这样注册

     collectionView.register(UINib(nibName: "name here",bundle:nil), forCellWithReuseIdentifier: "identifier")

并检查或打印您的标识符

答案 1 :(得分:0)

您是否使用xib创建单元格?

如果是这样的话 那么你必须在 viewdidload 中注册nib单元格,如下所示

 UINib *cellNib = [UINib nibWithNibName:@"yourCellNib" bundle:nil];
[self.collectionView registerNib:cellNib forCellWithReuseIdentifier:@"TheNibCellIdentifier"];

此外,您必须确保在加载单元格时使用相应的 ReuseIdentifier

yourCellNib*cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"TheNibCellIdentifier"  forIndexPath:indexPath];