【发布时间】: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