如何将UIView复制到另一个

时间:2012-08-17 09:02:25

标签: ios uiviewcontroller

我的目的是创建一个新的viewcontroller,其中包含当前controllrer视图的一些控件(按钮,标签等)。

//Get all the controls
NSArray* array =[[NSArray alloc]init];
   array=[self.view subviews];

for(int i =0 ;i<array.count ;i++)
{
// UIView *subview = (UIView *)[array objectAtIndex:i];
   UIView *subview =  (UIView *)[array objectAtIndex:i] ;
    ..
   [nextview.view insertSubview:subview  atIndex:i];
}

但我发现新的viewcontroller视图解除了父控件的所有控件也消失了。我怎样才能将UIView *对象复制到另一个?

1 个答案:

答案 0 :(得分:4)

您无法复制UIView,它不会实现复制协议。但您可以轻松创建一个创建新视图的方法,然后创建所有子视图的新实例并将其设置为旧视图。

类似的东西:

@interface UIView (Copy)
- (UIView*)newDuplicate;
@end

@implementation UIView (Copy)
- (UIView*)newDuplicate {
    UIView *v = [[[self class] alloc] initWithFrame:self.frame];
    v.autoresizingMask = self.autoresizingMask;

    for (UIView *v1 in self.subviews) {
        UIView *v2 = [[[v1 class] alloc] initWithFrame:v1.frame];
        v2.autoresizingMask = v1.autoresizingMask;
        [v addSubview:v2];
    }

    return v;
}         
@end

但是这不会复制视图的所有属性,也不是一个完美的解决方案。 您应该在要复制的视图上实现类似的功能。