我有一个简单的刽子手游戏,我希望使用UIcollectionview
更优雅,但是让单个细胞更新会导致我的头发更多掉线!!
代码的逻辑工作,如果我尝试插入或删除一个单元格,应用程序崩溃,indexPath变量打印出来,但UIcollectionview
单元格拒绝更新。
我使用Xcode的故事板来创建视图,它有一个命名的插座和原型单元格,视图快乐地填充但不会改变,我做错了什么?任何帮助将不胜感激。
let indexPath1 = IndexPath(item: item!, section: 0)
reloadCollectionView(indexPath: indexPath1 as NSIndexPath?)
然后我打电话给:
func reloadCollectionView(indexPath:NSIndexPath?) {
print("reload indexPath item: \(indexPath?.item) and section: \(indexPath?.section)")
if (indexPath != nil){
let cell = collectionOutlet.cellForItem(at: indexPath as! IndexPath) as! ElementsCollectionViewCell
let section = indexPath?.section
if section == 0 {
cell.letterLabel.text = self.lettersArray0[(indexPath?.item)!]
collectionOutlet.reloadItems(at: [indexPath as! IndexPath])
print(" Cell text: \(cell.letterLabel.text ?? "NOWT")")
//collectionOutlet.reloadData()
print("Index \(indexPath)")
}
答案 0 :(得分:2)
如果您只想更新一个单元格,而不是重新加载整个集合视图,则可以执行以下操作:
collectionOutlet.performBatchUpdates({
collectionOutlet.reloadItems(at: [indexPath])
}){
// optional closure
print(“finished updating cell”)
}
答案 1 :(得分:1)
cellForItemAt
方法更新您的单元格。获取单元格更新的正确方法是更新模型,然后重新加载集合视图,该视图将调用cellForItemAt
并根据模型重新绘制单元格。
在您的情况下,您的模型看起来像self.lettersArray0
,因此请确保在调用重新加载之前已更新。
您可以使用以下任何一种方法重新加载单元格:
collectionView?.reloadData()
collectionView?.reloadItems(at: )
collectionView?.reloadSections(sections:)