制作一个 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
是一个自定义类,它覆盖了initWithFrame
和initWithCoder
,没有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 的精确副本,除了制作它的精确副本实例外,它希望永远不会被自己使用的主要内容,如果未能解决你的问题,请参考以下文章