【问题标题】:How to duplicate an UIView designed in a storyboard?如何复制故事板中设计的 UIView?
【发布时间】:2014-08-22 11:54:51
【问题描述】:

所以我有一个我在故事板视图控制器中设计的视图,我想从代码中多次重用该设计。在 XCode 5 中可以做到这一点吗?如果是这样,你能告诉我正确的方向吗?

【问题讨论】:

    标签: ios storyboard xcode5


    【解决方案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 设计的视图,它是给定视图控制器的一部分。表格视图单元格之类的东西在表格视图中被重用...
    猜你喜欢
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2013-02-27
    • 2013-11-04
    • 1970-01-01
    相关资源
    最近更新 更多