复制并重用放置在IB中的自定义UIViewObject

时间:2015-04-21 15:07:57

标签: ios objective-c iphone uiview uiimageview

我使用界面构建器创建自定义UIView对象。该视图包含UILabel和UIImageView。

我在ViewController中使用界面构建器放置了此对象,并将UIView的类设置为UIViewLabelImage。我在该类.h文件中引用了UILabel和UIImageView。 我还创建了一个CustomOutlet来操作这个新的UIViewLabelImage对象。

enter image description here  我设法使用:

检索对象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属性中引用的图像和文本?

1 个答案:

答案 0 :(得分:0)

您所做的就是创建一个新类,设置一些可以使用IB更改的变量。因此,在您的类中的viewWillAppear之后,您可以引用该特定对象及其在IB中的值(图像,文本等)。既然您有对现有对象的引用,您只需要将相同的值设置为新创建的对象。如果您希望克隆确切的视图,那么这是一个不同的答案。

newCustomObject.img = self.CustomOutlet.img
// and so on

如果您正在寻找创建"克隆"在某些情况下,您可以使用NSKeyedArchiver对现有视图执行此操作。

id copyOfView = 
[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:originalView]];

我的建议是简单地使用IB作为自定义类的模板,然后在创建新实例后在代码中分配图像和文本。