私のアプリでは、UICollectionViewでセルを選択した場合、境界線が青色になり、別のセルを選択すると、境界線が透明になるはずです。didDelectlectItemAt別のセルが選択されたときにindexPathがトリガーされない
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! ChatCell
/* Set some settings */
if globalSelected[indexPath.item] {
cell.circleView.layer.borderColor = UIColor.blue.cgColor
} else {
cell.circleView.layer.borderColor = UIColor.clear.cgColor
}
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
//Global variable for maintain selection
global.selectedChatPath = indexPath
globalSelected[indexPath.item] = true
collectionView.reloadData()
}
func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
if indexPath != nilPath {
globalSelected[indexPath.item] = false
collectionView.reloadData()
}
}
nilPathがちょうどIndexPath(:-1、セクション:アイテム0)である:私が書いた方法があるが、それは問題ではありませんが、理由collectionView(_ collectionView:UICollectionView、didDeselectItemAt indexPath:IndexPath)は呼び出されません。私のCollectionViewはですallowSelection = trueとallowsMultipleSelection = falseプロパティです。私はどんな助けでも感謝しています。
CollectionViewの代理人を追加する "collectionView.delegate = self" – Ragul
@Ragulありがとうございます! UICollectionViewDataSourceとUICollectionViewDelegateのプロトコルに準拠した別のクラスがあり、このクラスのインスタンスをUICollectionViewのデリゲートとデータソースとして宣言しました。また、最初の手順はうまくいきます:セルをクリックした後、枠線が青色に変わります(委任がうまくいくことを意味します)。しかし、他をクリックすると枠線も青色になりますが、前の枠線細胞はまだ青い(私は透明にしたい)。 –
ちょうど選択ごとにcollectionViewを再ロード – Ragul