复制,复制或复制UIView

我有一个UIView通过接口生成器链接到UIViewController。 是否有可能复制,复制或复制此视图,以便我可以多次使用它?

当然。 这个文档就是一个很好的例子, 这是为UITableViewCell ,但也是一个很好的方法在这里使用。

根据视图的复杂性,您可能希望将其设置为自定义视图类,并为其拥有的IBOutlet视图提供自己的IBOutlet属性; 在这种情况下,您可以在Interface Builder中将视图的“Class Identity”设置为该类。 然后,您的视图控制器可以通过例如myLoadedView.someLabel访问任何给定的XIB加载的视图上的视图,而不必像上述文档所build议的那样使用[myLoadedView viewWithTag:3]

以下类别可能不是特别有效,但在一个项目中为我工作:

 @implementation UIView (OPCloning) - (id) clone { NSData *archivedViewData = [NSKeyedArchiver archivedDataWithRootObject: self]; id clone = [NSKeyedUnarchiver unarchiveObjectWithData:archivedViewData]; return clone; } @end 

我不会实现-copy或-copyWithZone:苹果公司未来可能会这样做。 请注意,并非所有视图都以相同的程度执行归档。 你肯定需要实现NSCoding方法来定制要克隆的NSView子类的属性(否则在克隆的视图中将变为nil)。 比编写自定义克隆代码更容易。

这里有一个你可以使用的新方法:使用UIView的方法:

 - (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates 

这是绘制视图的最快方法。 在iOS 7中可用。

你可以试试下面的Swift 3.0.1:

 extension UIView{ func copyView() -> AnyObject{ return NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: self))! as AnyObject } }