如何在 Swift 中复制/复制自定义 collectionview 单元格?

Posted

技术标签:

【中文标题】如何在 Swift 中复制/复制自定义 collectionview 单元格?【英文标题】:How to copy/duplicate a custom collectionview cell in Swift? 【发布时间】:2018-11-23 21:04:15 【问题描述】:

我想将自定义collectionview 单元格从viewcontroller 复制到另一个,问题是collectionview 单元格一旦我点击它就会消失,因为-显然-将它作为子视图添加到第二个viewcontroller 中。

这里的大部分方法我都试过了Create a copy of a UIView in Swift

关于存档返回零。

关于原型和结构的其他内容,它不会返回视图的新地址。

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
    
        struct ObjectToCopied 
            var objToBeRetrieved: UIView? = nil

            init(objToSaved : UIView?) 
                objToBeRetrieved = objToSaved
            
        
        let pickedView : UIView? = collectionView.cellForItem(at: indexPath)
        let tempObj = ObjectToCopied(objToSaved: pickedView)
        let copiedObj = tempObj
        let copiedView = copiedObj.objToBeRetrieved as? UIView
// here the copiedview's address is THE SAME as tempObj's ObjToBeRetrieved.
    

自定义 CollectionView 单元格图片示例:

【问题讨论】:

【参考方案1】:

不要复制 UIView 对象!

你的模型不好。 您必须将数据——信息直接存储在单元格之外的某个地方。

您必须使用indexPath 调用您的“数据库”来检索信息。没有了!

关于您的问题。 此对象不会复制您的对象。

struct ObjectToCopied 
            var objToBeRetrieved: UIView? = nil

            init(objToSaved : UIView?) 
                objToBeRetrieved = objToSaved
            
        

ObjectToCopied 是一个值类型。但是UIView 是一个引用类型。因此,objToBeRetrieved 包含与pickedView 相同的地址。解决方案?使用objToBeRetrieved = objToSaved.copy()。但是,请,真的不要这样做。这真的很糟糕。此外,我认为这会破坏某些东西。使用更好的应用模型——第一个建议。

【讨论】:

【参考方案2】:

为什么需要复制 collectionView 单元格?您可以简单地将数据传递给下一个 viewController 并创建新的视图或单元格(无论您需要什么)并在其上显示数据。

复制 collectionView 单元格的任何具体原因?

【讨论】:

不,只是想用几行代码复制它,而不是再次创建它的麻烦

以上是关于如何在 Swift 中复制/复制自定义 collectionview 单元格?的主要内容,如果未能解决你的问题,请参考以下文章

Swift - iOS 9:如何在 iOS 9 中呈现具有自定义大小的 UIViewController? [复制]

如何在多个视图控制器中使用自定义工具栏而不重复代码和复制元素(swift)?

我如何使用 ?: 在 Swift 中? [复制]

如何向子视图属性 Swift 添加操作? [复制]

在tableView swift的单元格页脚视图中复制行

如何在swift ios中将多个图像添加到自定义表格视图单元格?