Objective c 克隆或复制UIViewController或UIView
UII我需要复制、自我控制或自我查看,我已尝试:Objective c 克隆或复制UIViewController或UIView,objective-c,uiview,uiviewcontroller,copy,clone,Objective C,Uiview,Uiviewcontroller,Copy,Clone,UII我需要复制、自我控制或自我查看,我已尝试: UIView* viewOfSelf =[self.view copy]; UIViewController* controller = [self copy]; UIView* viewOfSelf =[self.view mutableCopy]; UIViewController* controller = [self mutableCopy]; 错误是: -[UIViewController mutableCopyWithZo
UIView* viewOfSelf =[self.view copy];
UIViewController* controller = [self copy];
UIView* viewOfSelf =[self.view mutableCopy];
UIViewController* controller = [self mutableCopy];
错误是:
-[UIViewController mutableCopyWithZone:]: unrecognized selector sent to instance 0xb803490
-[UIView copyWithZone:]: unrecognized selector sent to instance 0x6e0acb0
对于要可复制的对象,它必须实现
NSCopying
协议,而UIView
类和UIViewController
类都不能实现
如果你想复制一个视图,我敢肯定你做错了什么。复制应该用可重用的UIView
替换,就像在UITableView
中使用dequeueReusableCellWithIdentifier:
方法一样
复制视图控制器绝对是一种反模式。如果您希望获得已拥有的视图控制器的精确副本,请使用与当前视图控制器相同的参数创建视图控制器的新实例。使用-
NSData *tempArchiveView = [NSKeyedArchiver archivedDataWithRootObject:self.view];
UIView *viewOfSelf = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveView];
同样地-
NSData *tempArchiveViewController = [NSKeyedArchiver archivedDataWithRootObject:self];
UIViewController *controller = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveViewController];
不幸的是,我还不允许发表评论,但rishi的解决方案有一个问题:它不复制
NSLayoutConstraint
s。因此,如果您的任何视图使用autolayout,则不会复制这些视图。我正在编写一个小型库来解决这个问题,并将在完成后将其发布到github。不幸的是,我还没有找到一个现成的解决方案
//编辑
对不起,我之前写的不完全正确。我做了更多的研究,结果表明,默认情况下,归档视图中的
NSLayoutConstraint
s不会保存。但是,您实际上可以通过将约束的shouldBeArchived
属性设置为YES
来指定是否要存档约束。然后,即使在这个伪copy
之后,您仍会在复制的视图中保留正确的约束。什么是self
的类<代码>MyViewController?尽管Rishi的回答对我也很有效,但我认为没有可更改的UIView
和UIViewController
副本,但创建新实例证明是解决我问题的更可靠的方法。谢谢没有得到所有东西,比如自定义手势等。嗯,没有得到我的UIImageView,我的UIImageView是我正在克隆的视图的子视图。