mam następujące UICollectionView
która jest wypełniana przez Array
z NSManagedObject
typu Categories
przewijania UICollectionView wybiera Wrongs komórek - szybkie
Problemem jest to, że po wybraniu Cell
przewijania nie działa prawidłowo. Podczas przewijania UICollectionView
inne komórki zostają wybrane i odznaczone. Dziwne zachowanie. Wydaje mi się, że dzieje się tak z powodu indeksu IndexPath, który jest nieprawidłowo ustawiony po przewinięciu? W każdym razie zmagałem się z tym przez kilka godzin i nie mogę tego uchwycić. Mam nadzieję, że ktoś może wskazać mi właściwy kierunek!
Pobrana kategoria zostanie porównana z kategorią, aby sprawdzić, czy jest już wybrana i czy są one takie same, czy odwrotnie.
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("CategorySelectionCollectionCell", forIndexPath: indexPath) as CategoryCollectionViewCell
if fetchedCategories[indexPath.row] == category {
cell.categoryLabel?.text = fetchedCategories[indexPath.row].name
cell.categoryLabel?.textColor = UIColor.whiteColor()
cell.backgroundColor = fetchedCategories[indexPath.row].iconColor as? UIColor
collectionView.selectItemAtIndexPath(indexPath, animated: true, scrollPosition: UICollectionViewScrollPosition.None)
} else {
cell.categoryLabel?.text = fetchedCategories[indexPath.row].name
cell.categoryLabel?.textColor = fetchedCategories[indexPath.row].iconColor as UIColor
collectionView.deselectItemAtIndexPath(indexPath, animated: true)
}
return cell
}
func collectionView(collectionView: UICollectionView!, didSelectItemAtIndexPath indexPath: NSIndexPath!) {
var cell = collectionView.cellForItemAtIndexPath(indexPath) as CategoryCollectionViewCell
cell.categoryLabel?.textColor = UIColor.whiteColor()
cell.backgroundColor = fetchedCategories[indexPath.row].iconColor as? UIColor
category = fetchedCategories[indexPath.row]
}
func collectionView(collectionView: UICollectionView!, didDeselectItemAtIndexPath indexPath: NSIndexPath!) {
if var cell = collectionView.cellForItemAtIndexPath(indexPath) as? CategoryCollectionViewCell {
cell.categoryLabel?.text = fetchedCategories[indexPath.row].name
cell.categoryLabel?.textColor = fetchedCategories[indexPath.row].iconColor as UIColor
cell.backgroundColor = UIColor.whiteColor()
}
}
Nie ma w tym nic dziwnego, otrzymujesz ten wynik, ponieważ nie rozumiesz ponownego użycia komórki. Nie powinieneś ustawiać właściwości komórki w didSelectRowAtIndexPath, ponieważ kiedy ta komórka zostanie ponownie użyta, pojawi się z tymi zmianami, ale teraz w innym miejscu w widoku kolekcji. Zamiast tego należy zmienić właściwość w modelu, sprawdzić tę właściwość w komórceForRowAtIndexPath i odpowiednio ustawić swój interfejs w klauzuli if-else. Wykonaj wyszukiwanie w tej witrynie w celu ponownego użycia komórki; powinieneś znaleźć wiele odpowiedzi. – rdelmar
Czy możesz wysłać przykład (rapid 3) @rdelmar –