5

(下面的屏幕截图有助于解释我想要做什么)

这背后的想法是我有一个UIView,里面有各种不同UI的元素,例如,假设我有一个UIView,里面有一个UILabel

现在我想复制UIView(里面有标签),但是在那之后我可能需要对标签进行更改,例如更改文本属性。

我需要这样的东西的原因是我可以UIView用我需要的所有东西来构建它,看起来不错,但实际上有不同的数据和不同的副本。

我不确定这是最好的方法,但这是我能想到的唯一方法。如果有人对如何做到这一点有任何想法,或者对更好的方法有任何想法,我将不胜感激。很多!截图方便理解

4

3 回答 3

7

我个人认为最好的答案是分别创建每个视图并根据需要进行配置。您可以创建一个方法,将新的 UIView 配置为看起来相同,并通过它传递每个视图。

但是,如果你真的需要复制一个 UIView,你可以将它归档,然后再取消归档:

id copyOfView = 
[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:originalView]];
UIView *myView = (UIView *)copyOfView;
[self.view addSubview:myView];

如果您有很多这些,请确保您使用 Instruments 时间分析器来检查您的绘图效率。

于 2013-03-14T13:41:55.420 回答
6

这是一件非常自然且有用的事情。您正在寻找的是一个容器视图控制器。将您的可重用“单元”放入它自己的视图控制器和它自己的 nib 文件中。然后,在您的父视图控制器中,使用addChildViewController:添加任意数量的这些,并配置它们中的每一个。它们每个都有自己的 IBOutlets,您可以使用它们来修改内容。

UITableView这与and使用的模式非常相似UITableViewCell(它没有专门使用“子视图控制器”,但确实使用了这种模式)。

有关完整的详细信息,请参阅iOS 视图控制器编程指南中的“创建自定义容器视图控制器”

请注意,Storyboard 在对象模板中包含一个“容器视图”作为选项,以使其更加容易。

如果您想要较低级别的访问,您也可以手动执行此操作,UINib用于加载 nib 文件并连接其插座(这就是我们在 iOS 5 之前的做法),但今天我将使用子视图控制器。

于 2013-03-14T13:54:21.467 回答
0

如果里面只有一个标签,显而易见的解决方案是拥有一个自定义 UIView 子类,并将该标签添加为子视图。每次需要新视图时,您都可以创建自定义子类的实例并设置标签文本。如果您有多个要设置的东西,其中一些对于您的所有自定义子类视图都是通用的,您可以使用原型设计模式,实现起来非常简单。

于 2013-03-14T13:53:10.150 回答