我使用界面构建器创建自定义UIView对象。该视图包含UILabel和UIImageView。
我在ViewController中使用界面构建器放置了此对象,并将UIView的类设置为UIViewLabelImage。我在该类.h文件中引用了UILabel和UIImageView。 我还创建了一个CustomOutlet来操作这个新的UIViewLabelImage对象。
我设法使用:
检索对象UIViewLabelImage UIViewLabelImage *view = (UIViewLabelImage *)[self.view viewWithTag:101];
//or using self.CustomOutlet.
我能够改变视图,文本和图像一切都很好。
self.CustomOutlet.img.backgroundColor = [UIColor redColor];
如果我想以编程方式添加另一个UIViewLabelImage,它也可以。例如,我使用新标签检索新创建的对象。
但是当我尝试复制UIViewLabelImage时我遇到了问题。复制工作和屏幕上显示的对象与第一个相同,但我无法更改该标签的文本或图像。 这是因为copyOFLabel.text和copyOFLabel.img都是nil。
UIViewLabelImage *copyOFLabel = [NSKeyedUnarchiver unarchiveObjectWithData:
[NSKeyedArchiver archivedDataWithRootObject:self.CustomOutlet]];
copyOFLabel.tag = 11;
//copyOfLabel.text == nil
copyOFLabel.text.text = @"Copy Label";
copyOFLabel.backgroundColor = [UIColor greenColor];
copyOFLabel.frame = CGRectOffset(copyOFLabel.frame, 100, 200);
//view Added same as self.CustomOutlet expect for the background color set to green
[self.view addSubview:copyOFLabel];
有没有办法复制那个UIViewLabelImage并保留UIViewLabelImage变量的text和img属性中引用的图像和文本?
答案 0 :(得分:0)
您所做的就是创建一个新类,设置一些可以使用IB更改的变量。因此,在您的类中的viewWillAppear之后,您可以引用该特定对象及其在IB中的值(图像,文本等)。既然您有对现有对象的引用,您只需要将相同的值设置为新创建的对象。如果您希望克隆确切的视图,那么这是一个不同的答案。
newCustomObject.img = self.CustomOutlet.img
// and so on
如果您正在寻找创建"克隆"在某些情况下,您可以使用NSKeyedArchiver对现有视图执行此操作。
id copyOfView =
[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:originalView]];
我的建议是简单地使用IB作为自定义类的模板,然后在创建新实例后在代码中分配图像和文本。