如何在 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? [复制]