ios - 如何将UIView复制到另一个

标签 ios uiviewcontroller

我的意图是创建一个新的 View Controller ,其中包含当前 Controller View 的一些控件(按钮、标签等)。

//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];
}

但是我发现当新的 View Controller View 关闭时,父控件的所有控件也会消失。我如何将 UIView * 对象复制到另一个对象?

最佳答案

你不能复制 UIView,它没有实现复制协议(protocol)。但是您可以轻松地创建一个方法来创建新 View ,然后创建所有 subview 的新实例并将它们设置为旧 View 。

类似于:

@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

但这不会复制 View 的所有属性,并且它不是一个完美的解决方案。 您应该在要复制的 View 上实现类似的操作。

关于ios - 如何将UIView复制到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12002826/

相关文章:

ios - 在锁屏 ios 上处理推送通知

objective-c - iOS - ModalViewControllers 的 ARC/内存管理问题

ios - 向 Storyboard添加了 UIViewController,但无法在 xamarin ios 中以编程方式读取它

ios - 使用 insertSubview 显示时,UIViewController 在屏幕上被按下

ios - 如何在 Swift/Xcode 中为按钮设置图像

ios - 如果在两个线程中同时保存一个 NSManagedObjectContext 实例怎么办?

c++ - 在 iOS 上的 C++ 中获取加密安全随机数

ipad - 使用 Xcode 4.3.2 Storyboard 进行选择时隐藏主视图 Controller

ios - 在哪里初始化 subview ?

iphone - 来自 NSData 的图像未正确加载