gpt4 book ai didi

ios - 在 UICollectionViewController 中仅选择一项

转载 作者:可可西里 更新时间:2023-10-31 23:56:48 25 4
gpt4 key购买 nike

我已经实现了 UICollectionViewController 的一个子类,它可以水平滚动,我希望它一次只能选择一个项目。

当我在当前屏幕上更改所选项目时,它工作正常。但是,例如,如果我在集合的最开头选择一个项目,然后向右滚动并选择另一个项目,第一个项目仍将被选中。

这是我的 CollectionView 的当前版本:

class GenresCollectionVC: UICollectionViewController {

var selectedIndexPath: IndexPath?

// MARK: UICollectionViewDataSource
override func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}

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

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

cell.genreNameLabel.text = MockData.instance.genres[indexPath.row]
if selectedIndexPath == indexPath {
redraw(selectedCell: cell)
} else {
redraw(deselectedCell: cell)
}

return cell
}

// MARK: UICollectionViewDelegate
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
guard let cell = collectionView.cellForItem(at: indexPath) as? GenreCollectionViewCell else {
return
}
redraw(selectedCell: cell)
selectedIndexPath = indexPath
}

override func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
guard let cell = collectionView.cellForItem(at: indexPath) as? GenreCollectionViewCell else {
return
}
redraw(deselectedCell: cell)
selectedIndexPath = nil
}

private func redraw(selectedCell cell: GenreCollectionViewCell
) {
cell.layer.borderWidth = 1.0
cell.layer.cornerRadius = cell.bounds.height / 2
cell.layer.borderColor = UIColor.violetNeeoColor.cgColor

cell.genreNameLabel.textColor = UIColor.violetNeeoColor
}

private func redraw(deselectedCell cell: GenreCollectionViewCell) {
cell.layer.borderWidth = 0.0
cell.layer.cornerRadius = 0.0

cell.genreNameLabel.textColor = UIColor.white
}
}

我做错了什么?

最佳答案

在您的 GenreCollectionViewCell 类中,覆盖 isSelected 属性,即

override var isSelected: Bool{
willSet{
super.isSelected = newValue
if newValue
{
self.layer.borderWidth = 1.0
self.layer.cornerRadius = self.bounds.height / 2
self.layer.borderColor = UIColor.violetNeeoColor.cgColor
self.genreNameLabel.textColor = UIColor.violetNeeoColor
}
else
{
self.layer.borderWidth = 0.0
self.layer.cornerRadius = 0.0
self.genreNameLabel.textColor = UIColor.white
}
}
}

现在您不需要在 didSelectItemAt delegate 方法中手动选择/取消选择单元格。 isSelected 属性将自动处理它。

关于ios - 在 UICollectionViewController 中仅选择一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44205550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com