我想将一个自定义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单元格图片示例:
答案 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单元格的任何特定原因?