私のアプリケーションでは、UICollectionView
12 x4の正方形があります。ユーザーが同じサイクルでそれらの行から4つだけを選択できるようにしたい。他の行をブロックするにはどうすればよいですか?のヘッダーについて何か読んだのですUITableView
が、これはで機能しませんでしたUICollectionView
このソリューションを試してください:
var firstIndex = -1
var lastIndex = -1
var arraySelectedIndexes = [Int]()
var setEligibleIndexesForSelection = Set<Int>()
let numerOfItems = 20
私はすべてのシナリオを検討しようとしました:
extension ViewController : UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
switch (self.setEligibleIndexesForSelection.contains(indexPath.row), self.arraySelectedIndexes.count == 0) {
case (false,false):
return false
default:
return true
}
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
self.arraySelectedIndexes.append(indexPath.row)
self.arraySelectedIndexes.sort()
let cell = collectionView.cellForItem(at: indexPath)
cell?.backgroundColor = UIColor.lightGray
self.firstIndex = self.arraySelectedIndexes[0]
self.lastIndex = self.arraySelectedIndexes[self.arraySelectedIndexes.count - 1]
self.updateEligibleIndexArray()
}
func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
let indexOfSelectedData = self.arraySelectedIndexes.firstIndex(of: indexPath.row)
self.arraySelectedIndexes.remove(at: indexOfSelectedData!)
if self.arraySelectedIndexes.count > 0 {
self.firstIndex = self.arraySelectedIndexes[0]
self.lastIndex = self.arraySelectedIndexes[self.arraySelectedIndexes.count - 1]
self.updateEligibleIndexArray()
}
else {
self.firstIndex = -1
self.lastIndex = -1
self.setEligibleIndexesForSelection.removeAll()
}
let cell = collectionView.cellForItem(at: indexPath)
cell?.backgroundColor = UIColor.white
}
func updateEligibleIndexArray() {
self.setEligibleIndexesForSelection.removeAll()
for i in self.firstIndex..<self.firstIndex+4 {
if i < self.numerOfItems && !self.arraySelectedIndexes.contains(i) {
self.setEligibleIndexesForSelection.insert(i)
}
}
for i in self.lastIndex-3..<self.lastIndex {
if i >= 0 && !self.arraySelectedIndexes.contains(i) {
self.setEligibleIndexesForSelection.insert(i)
}
}
}
}
私はいくつかのシナリオを見逃したかもしれないので、それがうまくいったかどうか私に知らせてください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加