因为对象是引用类型,而不是值类型,如果您将一个 UIView
设置为等于另一个 UIView
,则 View 是同一个对象。如果您修改一个,您也会修改另一个。
我有一个有趣的情况,我想在另一个 View 中添加一个 UIView
作为 subview ,然后我做了一些修改,这些修改不应该影响原来的 UIView
。我如何制作 UIView
的副本,以便确保将该副本添加为 subview 而不是对原始 UIView
的引用?
请注意,我无法以与创建原始 View 相同的方式重新创建 View ,我需要一些方法来创建给定任何 UIView
对象的副本。
最佳答案
您可以制作一个 UIView 扩展。在下面的示例片段中,函数 copyView 返回一个 AnyObject,因此您可以复制 UIView 的任何子类,即 UIImageView。如果您想仅 复制 UIView,您可以将返回类型更改为 UIView。
//MARK: - UIView Extensions
extension UIView
{
func copyView<T: UIView>() -> T {
return NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self)) as! T
}
}
示例用法:
let sourceView = UIView()
let copiedView: UIView = sourceView.copyView()
关于ios - 在 Swift 中创建 UIView 的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27121655/