制作一个 uiview 的精确副本,除了制作它的精确副本实例外,它希望永远不会被自己使用

Posted

技术标签:

【中文标题】制作一个 uiview 的精确副本,除了制作它的精确副本实例外,它希望永远不会被自己使用【英文标题】:Make an exact copy of uiview which is desired to be never used itself except of for making exact copy instances of it 【发布时间】:2015-10-21 11:51:27 【问题描述】:

我在情节提要中的场景中有一个视图,它像firstResponder 一样布局视图层次结构,并像一个对象一样退出对象,这个视图,我们称之为supplementaryView,通过IBOutlet 连接到多个视图。

它连接到的视图和supplementaryView 是我的自定义类。将其设置为IBOutlet 的视图旨在通过 setter 接收此视图,然后复制并添加到 self 作为子视图和一些属性。

所以supplementaryView 有点像supplementaryView 的完全设计实例,除了复制之外,它永远不会用于任何事情。此外,这个supplementaryView 是一个自定义类,它覆盖了initWithFrameinitWithCoder,没有xib,完全由NSLayoutConstraints 的代码构建。

在运行时复制此supplementaryView 的最佳选择是什么?

我应该自己实现NSCopying 并复制IBInspectable 和其他自定义属性以及UIView 的属性吗?

或者在运行时使用class_copyPropertyList 遍历类的属性会更好吗?

或者有更好的选择吗?

【问题讨论】:

tl;博士;请用更少的文字简要介绍问题并格式化问题 【参考方案1】:

你不能在UIView 上实现NSCopying 你会得到一个异常,视图不是要被复制的,但是你可以做一个小技巧来实现这一点,你可以使用NSKeyedArchiver 存档UIView 对象,然后将其取消归档,本质上是“复制”视图。比如:

id viewCopy = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:viewToCopy]];

【讨论】:

你能告诉我归档和取消归档将如何改变UIView吗? @IgorMuzyka 它不会改变 UIView,但它会归档(序列化)和对象并反序列化它,本质上是给你一个视图的副本。

以上是关于制作一个 uiview 的精确副本,除了制作它的精确副本实例外,它希望永远不会被自己使用的主要内容,如果未能解决你的问题,请参考以下文章

如何制作 Core Data 对象图的精确副本?

制作包含所有内容和属性的段落的精确副本?

如何使用 XSLT 制作 xml 节点的子节点的精确副本?

制作不同宽度和高度的 UIView 的 Circle

在 iOS 中制作一个可拖动的 UIView 捕捉到边缘

如何在 UIView 上制作斜角?