2012-08-17 88 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

相關問題