ios - 在 Swift 中创建 UIView 的副本

标签 ios swift uiview

因为对象是引用类型,而不是值类型,如果您将一个 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/

相关文章:

ios - 如何从 objective-c 调用swift方法

swift - Xcode Swift 命令行工具从键盘读取 1 个字符而无需回显或需要按回车

swift - 对 UITabBarController 使用自定义 collectionView

iphone - 如何在应用程序首次启动时显示 UIAlertView(或 UIView)?

ios - 我们如何将 UItextfields 文本和 UIbuttons 标题标签准确地固定在中心位置

ios - 如何更改 UITableView 中分隔符的宽度

ios - 一个 firebase 分析项目的多个 bundle id

swift - 将 UnsafeMutableRawPointer 转换为 UInt64

ios - Swift:执行函数作为参数

iphone - 如何知道 UIView 何时完全隐藏?