复制一个UIView及其所有子视图的深度副本

3

我需要制作一个UIView的深拷贝,其中包含几个子视图。请帮我找出如何实现这一点?我在Google和SO上进行了一些搜索,但没有找到符合我的要求的内容。

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

我不能简单地重新创建包含按钮的视图结构,因为按下按钮会调用我的UIScrollView子类没有访问权限的类的函数。我也不想重新创建它们,因为似乎浪费时间去重新创建并放置容器视图中的所有子视图,而我可以简单地制作一个深拷贝。

有人能帮我吗?


除了Evan上面提出的优秀观点,你有没有研究过委托? - Luke
@Evan Cordell 是的...我是基于我在这里找到的苹果示例代码构建的:http://developer.apple.com/library/ios/#samplecode/StreetScroller/Introduction/Intro.html 它甚至不能正常工作,因为子视图不是深拷贝,所以它们只会出现在屏幕上一次(即应用程序启动时,UIView就已经在屏幕上了。我滚动时,当需要添加另一个(相同的)UIView时,它会出现,但原始的UIView似乎消失了,因为子视图是指向单个对象的指针)。整个东西一团糟,我很想能够深度复制并修复它! - WendiKidd
@Luke 我以前使用过苹果的代理,但从未创建过自己的代理。你认为我该如何使用代理来解决这个问题?谢谢! - WendiKidd
自然而然,我不知道你的应用程序在你所拥有的硬件上有多CPU密集型...如果你有时间,或许可以试试两种选项,然后再从中决定。我的意思是,你知道滚动视图中所有组件——你肯定可以循环遍历[theUIView subviews]数组,测试你想要的对象并进行复制吧? - Luke
啊哈,我现在明白了。我想唯一的方法就是在运行时创建更多的副本并隐藏它们;否则你将不得不遍历所有子视图,重新创建所有框架、颜色等等……但正如你所说,你很可能会遇到复制按钮目标等问题 - 但这里可能有一些有用的东西可以帮助完成这个:https://dev59.com/bm435IYBdhLWcg3w1z0t - Luke
显示剩余6条评论
1个回答

3

(从我的评论中发布)

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

如何获取UIButton目标、操作和控件事件?


1
这正是我需要的——有了从UIButton中复制所有内容的能力,我能够完全重建我的视图。虽然我希望苹果能够推出深度复制UI元素本身的功能,但在没有这种功能的情况下,这也能解决问题。谢谢!:) - WendiKidd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接