У меня есть UICollectionView.Он имеет только один раздел и несколько ячеек в этом разделе (в настоящее время 6).Внутри ячейки есть изображение (с радиусом круглого угла) и метка.Всякий раз, когда ячейка выбрана, я хочу добавить рамку вокруг изображения этой ячейки.Всякий раз, когда ячейка выбрана, вызывается «didSelectItemAt»."DidDeselectItemAt" также называется.Если ячейка видна, я могу удалить ее границу, установив для borderWidth значение 0.0.
В настоящее время в представлении коллекции одновременно отображаются только 4 ячейки.
Я делаю следующие шаги: 1. Выберите 2-ю ячейку.2. Выберите 5-ю ячейку.Ожидание: граница представления изображения 2-й ячейки должна стать 0 Фактическое поведение: обе ячейки имеют значение borderWitdth, отличное от 0.То же самое происходит и для выбора
Кроме этого, я делаю также следующее.1. Выберите первую ячейку.2. Выберите 6-ю ячейку.Ожидание: граница представления изображения 21-й ячейки должна стать равной 0. Фактическое поведение: граница обеих ячеек видна.Только после перетаскивания слишком много, значение borderWidth 1-й ячейки становится равным 0. То же самое происходит для выбора наоборот.
Ниже приведен мой код View Controller.
private var selectedCategory : Int = 0
override func viewDidLoad() {
super.viewDidLoad()
vibeCategoriesCollectionView.delegate = self
vibeCategoriesCollectionView.dataSource = self
vibeCategoriesCollectionView.register(UINib(nibName: "VibeCategoryCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "vibeCategoryCell")
vibeCategoriesCollectionView.selectItem(at: IndexPath(row: 0, section: 0), animated: true, scrollPosition: .centeredHorizontally)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
vibeCategoriesCollectionView.layer.cornerRadius = 10
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return VibeCategories.pickerStrings.count
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: view.frame.width / 6, height: vibeCategoriesCollectionView.frame.height)
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = vibeCategoriesCollectionView.dequeueReusableCell(withReuseIdentifier: "vibeCategoryCell", for: indexPath) as! VibeCategoryCollectionViewCell
cell.layoutIfNeeded()
cell.categoryName.text = VibeCategories.pickerStrings[indexPath.row]
cell.categoryImage.image = UIImage(named: VibeCategories.categoryImages[indexPath.row])
cell.categoryName.textColor = VibeCategories.vibeColors[indexPath.row]
cell.categoryImage.layer.borderColor = VibeCategories.vibeColors[indexPath.row].cgColor
if selectedCategory != indexPath.row {
cell.categoryImage.layer.borderWidth = 0.0
}
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 20
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 50
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 10, left: 10, bottom: 0, right: 10)
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let currentSelectedCell = collectionView.cellForItem(at: indexPath) as! VibeCategoryCollectionViewCell
currentSelectedCell.categoryImage.layer.borderWidth = 4.0
selectedCategory = indexPath.row
}
func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
let previousSelectedCell = collectionView.cellForItem(at: indexPath) as? VibeCategoryCollectionViewCell
if previousSelectedCell != nil {
previousSelectedCell!.categoryImage.layer.borderWidth = 0.0
}
}
Ниже приведен мой класс CollectionViewCellкод
class VibeCategoryCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var categoryImage: UIImageView!
@IBOutlet weak var categoryName: UILabel!
@IBOutlet weak var notificationLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
override func layoutIfNeeded() {
super.layoutIfNeeded()
categoryImage.layer.cornerRadius = categoryImage.frame.height / 2
categoryImage.clipsToBounds = true
categoryImage.layer.borderWidth = 4.0
notificationLabel.layer.cornerRadius = notificationLabel.frame.height / 2
notificationLabel.clipsToBounds = true
}
}
Может кто-нибудь сказать мне, что я делаю не так?