2

私の意図は、現在のコントローラー ビューのいくつかのコントロール (ボタン、ラベルなど) を持つ新しいビュー コントローラーを作成することです。

//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 * オブジェクトを別のオブジェクトにコピーするにはどうすればよいですか?

4

1 に答える 1

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

ただし、これはビューのすべてのプロパティをコピーするわけではなく、完全な解決策ではありません。コピーするビューにこのようなものを実装する必要があります。

于 2012-08-17T09:11:13.770 に答える