如何复制故事板中设计的 UIView?
Posted
技术标签:
【中文标题】如何复制故事板中设计的 UIView?【英文标题】:How to duplicate an UIView designed in a storyboard? 【发布时间】:2014-08-22 11:54:51 【问题描述】:所以我有一个我在故事板视图控制器中设计的视图,我想从代码中多次重用该设计。在 XCode 5 中可以做到这一点吗?如果是这样,你能告诉我正确的方向吗?
【问题讨论】:
【参考方案1】:便宜的方法,给视图打个标签。
然后UIView *view = [UIView viewWithTag:tag];
然后继续复制它,将其添加到视图中。
或者试试这个:
id copyOfView = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:originalView]];
请记住,并非所有内容都必须正确存档和取消存档(自定义字体、角半径等图层设置),并且应避免使用 IBOutlets,因为它们不会在克隆对象上得到更新。
【讨论】:
据我所知UIView
没有实现NSCopying
协议,所以像[view copy]
这样的东西将不起作用。知道如何复制视图而无需我创建一个方法吗?
@MihaiFratu 试试这个:id copyOfView = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:originalView]];
归档视图...这很...有趣!它可以工作.. 性能可能不会太差... 似乎有一些错误,因为我在视图中的一个按钮丢失了它的自定义字体和角半径。这似乎有点懒惰,实际上您应该做一些事情,例如将视图移动到 nib 并多次实例化它而不是克隆它。
实际上,这可能是一个非常糟糕的主意。我在复制的视图上有一个 IBOutlet,只是花了很长时间试图弄清楚为什么我在该 IBOutlet 对象上调用的函数没有效果。这是因为 IBOutlet 仍然指向原始视图的对象,而不是新创建的对象...
@CMash 是的,你得重做一些选择器。【参考方案2】:
你真正要问的是如何实现视图控制器多态。
这是一种常见的面向对象编程设计模式/原则。
如Wikipedia 所定义。
您可能会发现此SO Q&A 很有帮助。
本质上,您希望通过在父视图控制器中实现prepareForSegue
方法来设置某些目标视图控制器的公共属性。
【讨论】:
嗯...我想你错过了理解我的问题。我要做的就是复制一个使用 InterfaceBuilder 设计的视图,它是给定视图控制器的一部分。表格视图单元格之类的东西在表格视图中被重用...以上是关于如何复制故事板中设计的 UIView?的主要内容,如果未能解决你的问题,请参考以下文章