UII need copy, self controller or self.view, i have tried:
UIView* viewOfSelf =[self.view copy];
UIViewController* controller = [self copy];
UIView* viewOfS
Unfortunately I am not yet allowed to comment, but rishi's solution has one problem: it does not copy NSLayoutConstraint
s. So if any of your views are using autolayout, those are not going to get copied. I am writing a mini-lib to solve that and will post it to github when done. Unfortunately, I haven't found a ready-to-use solution anywhere.
//Edit
Sorry, what I wrote previously was not completely correct. I did some more research and it turns out that on default, the NSLayoutConstraint
s in the archived view are NOT saved. But, you can actually specify if you want to archive a constraint by setting its shouldBeArchived
property to YES
. Then, even after this fake copy
, you retain the right constraints in the copied view.
For an object to be copyable it must implement NSCopying
protocol which UIView
class nor UIViewController
class do not.
If you want to copy a view, I'm pretty sure you're doing something wrong. The copying should be replaced by reusable UIView
just like in UITableView
using dequeueReusableCellWithIdentifier:
method.
Copying view controller is definitely an anti-pattern. If you want exact copy of the view controller that you already have - create a new instance of it with same parameters that current one is.
Use -
NSData *tempArchiveView = [NSKeyedArchiver archivedDataWithRootObject:self.view];
UIView *viewOfSelf = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveView];
Similarly -
NSData *tempArchiveViewController = [NSKeyedArchiver archivedDataWithRootObject:self];
UIViewController *controller = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveViewController];