【问题标题】:Make a deep copy of a UIView and all its subviews制作 UIView 及其所有子视图的深层副本
【发布时间】:2012-05-17 07:47:26
【问题描述】:

我需要制作包含多个子视图的 UIView 的深层副本。请帮我弄清楚如何做到这一点?我在 google 和 SO 上进行了一些搜索,但没有找到任何我想要的东西。

对于那些想知道原因的人的解释:我有一个无限滚动的 UIScrollView,当然,内容重复。每个“集合”内容(例如,26 个标有 A-Z 的 UIButtons)都包含在一个视图中。这是我需要对其进行深层复制的视图,以便我可以在滚动视图中的屏幕上显示它的多个实例。

我不能简单地重新创建包含按钮的视图结构,因为按下按钮会调用我的 UIScrollView 子类无法访问的类的函数。我也不希望重新创建它们,因为当我可以简单地进行深层复制时,通过逻辑重新创建并将所有子视图放置在容器视图中似乎是一种浪费。

谁能帮帮我?

【问题讨论】:

  • 所以每次滚动时,您都在分配新的 UIView,即使它们与您在内存中已有的完全相同?
  • 除了上面 Evan 的出色观点之外,您是否考虑过代表?
  • @Evan Cordell 是的...我基于我在这里找到的 Apple 示例代码:developer.apple.com/library/ios/#samplecode/StreetScroller/… 它甚至不能正常工作,因为子视图不是深拷贝,所以它们只出现在屏幕上一次(即应用程序启动,UIView 在屏幕上。我滚动,当需要添加另一个(相同的)UIView 时,它会出现,但原来的 UIView 似乎 disappear 因为子视图是指向单个对象的指针)。整个事情一团糟,我希望能够深度复制和修复它!
  • @Luke 我以前使用过 Apple 的代表,但从未创建过自己的代表。你会如何建议我使用代表来解决这个问题?谢谢!
  • 您可能会在此处找到答案中的链接非常有用 - 它帮助我了解了很多关于委托以及如何编写自己的自定义方法等等的知识。 stackoverflow.com/questions/6208361/…

标签: objective-c ios uiscrollview uikit deep-copy


【解决方案1】:

(根据我的要求发表评论)

啊哈,我现在明白了。我认为唯一的方法是在运行时创建更多副本并隐藏它们;否则你必须遍历所有子视图,重新创建所有框架,颜色等......但正如你所说,你可能会遇到复制按钮目标等问题 - 但这里可能有一些有用的东西可以帮助实现这一点:

How to get UIButton Target, Action and Control events?

【讨论】:

  • 这正是我所需要的——通过从 UIButton 中复制所有内容的能力,我能够准确地重新创建我的视图。我希望 Apple 能够提供对 UI 元素本身进行深度复制的能力,但这在没有这种能力的情况下有效。谢谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多