如何更新在 Swift 4 之前和现在选择的 CollectionView 单元格?

Posted

技术标签:

【中文标题】如何更新在 Swift 4 之前和现在选择的 CollectionView 单元格?【英文标题】:How to update the CollectionView cell that selected before and now Swift 4? 【发布时间】:2018-02-26 07:44:53 【问题描述】:

我有一个水平收藏视图。当用户点击一张照片时,会出现一个 UIView 覆盖照片。一次只能选择一张照片。这意味着,如果选择了一张照片,如果我点击另一张照片,上一张照片将恢复正常。

我在下面实现这个代码:

 var previousSelectedIndexPath : IndexPath? 
 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 

        if previousSelectedIndexPath != nil 
            let previousCell = collectionView.cellForItem(at: previousSelectedIndexPath!) as! photoCell
            previousCell.uiViewHeight.constant = 0
        

        let currentCell = collectionView.cellForItem(at: indexPath) as! photoCell
        currentCell.uiViewHeight.constant = 250
        previousSelectedIndexPath = indexPath
 

我得到的是,当收藏视图首次启动时,它显示了我想要的行为。但是当我点击一张照片,然后向左滚动,然后再次点击一张新照片,它显示错误

线程 1:致命错误:打开包装时意外发现 nil 可选值

我认为是之前选择的照片不再出现在屏幕上,因此无法更新该照片的 UIView 的约束。

我也尝试实现这个解决方案,但也得到了同样的错误:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 

    let cell = collectionView.cellForItem(at: indexPath) as! photoCell
    cell.uiViewHeight.constant = 250    


func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) 

    let cell = collectionView.cellForItem(at: indexPath) as! photoCell
    cell.uiViewHeight.constant = 0

那么在这种情况下,我该如何解决这个问题呢?

【问题讨论】:

cellForItem(at:) 如果单元格不可见,则返回 nil,因此执行 as! 显然会使其崩溃。在cellForRowAtIndexPath中,根据indexPath添加/删除你的效果,在didSelect中,reloadCellForItemAtIndexPath为上一个(如果可见则重新加载,不可见则不做)。 @Larme 你能回答一下吗,我可以在我的代码中尝试一下 类似的东西:pastebin.com/q56EEXPJ 【参考方案1】:

Ken,不要强制转换您的UICollectionViewCell,您的应用可能会崩溃。

使用这样的安全代码:

if let currentCell = collectionView.cellForItem(at: indexPath) as? photoCell 
      // if succeed, do code

【讨论】:

以上是关于如何更新在 Swift 4 之前和现在选择的 CollectionView 单元格?的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 中的单元格在 iOS 中选择之前不会更新(swift)

如何在 Swift 中编辑或更新文本字段中的文本?

Swift - 如何在加载 ViewController 之前正确实现 CoreData 的更新/设置

iOS当我滚动到底部Swift 4时如何更新表格视图数据

无法在 Swift 4 上的 XCUITest 中设置设备方向

如何更新显示的 ETA 和距离值? Swift 4 MKDirections MapKit