Dav*_*073 12 clone copy objective-c uiviewcontroller uiview
UII需要复制,自我控制或自我查看,我试过:
UIView* viewOfSelf =[self.view copy];
UIViewController* controller = [self copy];
UIView* viewOfSelf =[self.view mutableCopy];
UIViewController* controller = [self mutableCopy];
Run Code Online (Sandbox Code Playgroud)
错误是:
-[UIViewController mutableCopyWithZone:]: unrecognized selector sent to instance 0xb803490
-[UIView copyWithZone:]: unrecognized selector sent to instance 0x6e0acb0
Run Code Online (Sandbox Code Playgroud)
ris*_*shi 30
使用 -
NSData *tempArchiveView = [NSKeyedArchiver archivedDataWithRootObject:self.view];
UIView *viewOfSelf = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveView];
Run Code Online (Sandbox Code Playgroud)
同样 -
NSData *tempArchiveViewController = [NSKeyedArchiver archivedDataWithRootObject:self];
UIViewController *controller = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveViewController];
Run Code Online (Sandbox Code Playgroud)
对于可复制的对象,它必须实现类或类不能的NSCopying协议.UIViewUIViewController
如果你想复制一个视图,我很确定你做错了什么.复制应该UIView像可重复使用一样替换,就像UITableView使用dequeueReusableCellWithIdentifier:方法一样.
复制视图控制器绝对是一种反模式.如果您想要已经拥有的视图控制器的精确副本 - 使用与当前参数相同的参数创建它的新实例.
不幸的是,我还不能发表评论,但是 rishi 的解决方案有一个问题:它不复制NSLayoutConstraints。因此,如果您的任何视图使用自动布局,则不会被复制。我正在编写一个迷你库来解决这个问题,并在完成后将其发布到 github。不幸的是,我还没有在任何地方找到现成的解决方案。
//编辑
抱歉,我之前写的并不完全正确。我做了一些更多的研究,结果发现默认情况下,NSLayoutConstraint存档视图中的s 不会保存。但是,您实际上可以通过将其shouldBeArchived属性设置为 来指定是否要存档约束YES。然后,即使在此 fake 之后copy,您仍会在复制的视图中保留正确的约束。