[插入/删除单元格UICollectionView中的节

问题描述 投票:0回答:1

下午好,

我正在尝试在UICollectionViewController中创建可扩展/可折叠单元格。细胞正确膨胀和塌陷。但是,每个单元格所保存的信息仍在后台显示在屏幕上。我将显示图片进行解释。如果用户折叠单元格,我试图从视图中删除信息,如果用户展开该单元格,则将其插入回来。

下面的图像表示该单元从折叠状态开始,展开该单元,然后再次折叠该单元的过程。 (请注意:这不仅发生在我单击的第一个单元格上,而且还发生在每个单元格上。)

第一张图像是在视图加载且单元格处于原始折叠状态时。

collapsed state

第二张图片显示了用户点击单元格以展开它时的情况。

expanded cell

第三张图片显示了用户何时折叠单元格的时间。

collapsing that cell again

我用来展开和折叠单元格的代码在下面

fileprivate let cellId = "cellId"
fileprivate let headerId = "headerId"
fileprivate let profID = "profID"
private let headerIdentifier = "userProfileHeader"
private let sectionIdentifier = "sectionHeader"
var section:Int?
var expandSection = [Bool]()
var items = [String]()

    fileprivate func setupCollectionView() {
    collectionView.backgroundColor = .white
    collectionView.contentInsetAdjustmentBehavior = .never
    collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId)
    self.expandSection = [Bool](repeating: false, count: self.items.count)
    collectionView.dataSource = self
    collectionView.delegate = self
    collectionView.register(userProfileHeader.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: headerIdentifier)

    collectionView.register(sectionHeader.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: sectionIdentifier)
}

    fileprivate func registerCollectionView() {

collectionView.register(profCell.self, forCellWithReuseIdentifier: "profCell")
    self.collectionView.register(userProfileHeader.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: headerIdentifier)

     self.collectionView.register(sectionHeader.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: sectionIdentifier)
}



var headerView: userProfileHeader?
var sectionView: sectionHeader?

override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {

    if kind == UICollectionView.elementKindSectionHeader {
         let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerIdentifier, for: indexPath) as? userProfileHeader

        if let user = self.user {
                 headerView?.myUser = user
             } else if let userToLoad = self.userToLoad {
                 headerView?.myUser  = userToLoad
             }

        return headerView!
    } else {

        let sectionViews = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: sectionIdentifier, for: indexPath) as? sectionHeader
        let categories = ["Skills, Preferences", "Bio", "Reviews"]
        sectionViews!.headerLabel.text = categories[indexPath.section]
        sectionViews!.backgroundColor = .lightGray
        return sectionViews!
    }

}

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
    return .init(width: view.frame.width, height: 340)
}

override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return items.count
}

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    self.expandSection[indexPath.row] = !self.expandSection[indexPath.row]
    self.collectionView.reloadItems(at: collectionView.indexPathsForSelectedItems!)
}

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
   let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "profCell", for: indexPath) as! profCell

    if indexPath.row == 0 {

        cell.educationView.text = user.education
        cell.skillsView.text = user.skills
        cell.preferencesView.text = "wassup bitches"

    } else if indexPath.row == 1  {

        cell.bioLabel.text = user.bio

    } else if indexPath.row == 2  {

        cell.labels.text = "Reviews"

    }
    }

    return cell
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    if self.expandSection[indexPath.row] {
        return CGSize(width: self.view.bounds.width - 20, height: 300)
    }else{
        return CGSize(width: self.view.bounds.width - 20, height: 80)
    }
}

[下午好,我正在尝试在UICollectionViewController中创建可扩展/可折叠单元格。细胞正确膨胀和塌陷。但是,每个单元格保持的信息仍然存在...

ios xcode uicollectionview uicollectionviewcell delete-row
1个回答
0
投票

而不是尝试在sizeForItemAt()内插入和删除项目,请对已展开或收缩的部分调用reloadSections(_ sections: IndexSet)。然后实现numberOfItems(inSection section: Int),以便在收缩时返回0或在展开时返回item.count。使用部分来保存顶级项目,使用单元格来保存可折叠子项目。

© www.soinside.com 2019 - 2024. All rights reserved.