2012-08-17 37 views
2

我的意图是创建一个新的视图控制器与当前控制器视图的一些控件(按钮,标签等)。如何复制UIView到另一个

//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视图关闭父控件的所有控件也disappering。我如何将UIView *对象复制到另一个?

+0

尝试重新使用该视图,如果你可以 – Felix 2012-08-17 09:18:12

+0

你也可以检查[这篇文章](http://stackoverflow.com/questions/4425939/can-uiview-be-copied)为解决方案使用NSKeyedUnarchiver '/'NSKeyedArchiver'。 – 2014-03-09 10:13:00

回答

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 

但这不会复制视图的所有属性,它不是一个完美的解决方案。 你应该在你想要复制的视图上实现类似的东西。

+0

感谢fbernardo,因为你说我需要为每种可能的控件类型(如按钮,标签,webview等等)编写单独的复制方法。 – 2012-08-17 11:16:02

相关问题