collectionView: reloadData работает, reloadItemsAtIndexPaths не работает
у меня есть UICollectionView
чьи исходные данные иногда меняются за кадром. Чтобы обновить его, когда он вернется, я написал в CollectionViewController
:
override func viewWillAppear(animated: Bool) {
self.collectionView!.reloadData()
}
...и это работает, но мне никогда не нужно обновлять более одной или двух ячеек в моем UICollectionView
, Так что я подумал, что было бы лучше, если бы Я заменил выше версия:
override func viewWillAppear(animated: Bool) {
self.collectionView!.reloadItemsAtIndexPaths(myArrayOfIndexPaths)
}
...но когда я это делаю, Xcode дает мне сообщение об ошибке:
операнд постфикс '!'должен иметь необязательный тип, удалить '!'".
когда я удалить '!- здесь сказано, что UICollectionView
не имеет элемент с именем reloadItemsAtIndexPaths
. Что я делаю не так?
4 ответов
из вашего кода похоже, что вы объявили свой collectionView как необязательный (с ?) в конце и, возможно, связал его с вашей раскадровкой с помощью @IBOutlet. Чтобы исправить вашу проблему, вы должны удалить ? от :
@IBOutlet var collectionView: UICollectionView?
и заменить его:
@IBOutlet var collectionView: UICollectionView!
таким образом, вы говорите компилятору, что ваш collectionView определенно существует (потому что вы связали его с раскадровкой).
в качестве альтернативы, вы можете связать свой collectionView, сделав это:
if let collectionView = collectionView {
collectionView.reloadItemsAtIndexPaths(myArrayOfIndexPaths)
}
Swift 3 код версии
var indexPaths = [IndexPath]()
indexPaths.append(indexPath) //"indexPath" ideally get when tap didSelectItemAt or through long press gesture recogniser.
collectionView.reloadItems(at: indexPaths)
Swift 4 обновить все элементы в разделе
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
var indexPaths: [NSIndexPath] = []
for i in 0..<collectionView!.numberOfItems(inSection: 0) {
indexPaths.append(NSIndexPath(item: i, section: 0))
}
collectionView?.reloadItems(at: indexPaths as [IndexPath])
}
Если вы хотите перезагрузить для одной ячейки, вы можете указать конкретную ячейку следующим образом: -
for index in indexPaths {
if index == [0, 0] {
print(index)
self.collectionView?.reloadItems(at: [index])
}
}
надеюсь, что это помогает.