gpt4 book ai didi

ios - Swift 2 - 调用 `didDeselectItemAtIndexPath` 时出现 fatal error

转载 作者:行者123 更新时间:2023-12-01 15:58:54 27 4
gpt4 key购买 nike

我有一个 UICollectionView我在哪里使用函数didSelectItemAtIndexPath选择一个单元格并更改其 alpha。

UICollectionView有12个细胞。

为了将取消选择的单元格带回 alpha = 1.0我使用函数didDeselectItemAtIndexPath .

然而,到目前为止,当我选择一个单元格并滚动 UICollectionView 时,代码仍然有效。应用程序崩溃在线let colorCell : UICollectionViewCell = collectionView.cellForItemAtIndexPath(indexPath)!在带有错误的取消选择函数内部:

fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)



我想我需要重新加载 Collection View ,但是如何重新加载并保持选中单元格?
override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

let colorCell : UICollectionViewCell = collectionView.cellForItemAtIndexPath(indexPath)!
colorCell.alpha = 0.4
}


override func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) {

let colorCell : UICollectionViewCell = collectionView.cellForItemAtIndexPath(indexPath)!
colorCell.alpha = 1.0
}

最佳答案

发生崩溃是因为您选择并滚动出屏幕可见区域的单元格已被 Collection View 中的其他单元格重用。现在,当您尝试获取 didDeselectItemAtIndexPath 中的选定单元格时,使用 cellForItemAtIndexPath ,导致崩溃。

为避免崩溃,正如@Michael Dautermann 所述,使用可选绑定(bind)来验证单元格是否为 nil,然后设置 alpha

func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) {
if let cell = collectionView.cellForItemAtIndexPath(indexPath) {
cell.alpha = 1.0
}
}

为了在滚动期间保持您的选择状态,请检查单元格的选择状态并设置您的 alpha当您在 cellForItemAtIndexPath 中将单元格出列时,相应地值方法
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath)

if cell.selected {
cell.alpha = 0.4
}
else {
cell.alpha = 1.0
}

return cell
}

关于ios - Swift 2 - 调用 `didDeselectItemAtIndexPath` 时出现 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33962068/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com