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

时间:2018-11-23 21:04:16

标签: ios swift uiview uicollectionview uicollectionviewcell

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

我在Create a copy of a UIView in Swift

处尝试了大多数方法

关于归档的一项返回nil。

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

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单元格图片示例:

Custom CollectionView cell image example

2 个答案:

答案 0 :(得分:2)

请勿复制UIView对象!

您的模型不好。 您必须将数据–信息直接存储在单元外部。

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

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

struct ObjectToCopied {
            var objToBeRetrieved: UIView? = nil

            init(objToSaved : UIView?) {
                objToBeRetrieved = objToSaved
            }
        }

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

答案 1 :(得分:2)

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

复制collectionView单元格的任何特定原因?