我想将一个 UIView 复制到另一个 View 而不使其存档或取消存档。 如果您有任何解决方案,请帮助我。
我尝试通过扩展 UIView 作为 Stack over flow 上已经可用的答案。但是当我通过带有图案图像背景颜色的 View 时它崩溃了。
最佳答案
下面与我的评论相关的代码:
extension UIView
{
func copyView() -> UIView?
{
return NSKeyedUnarchiver.unarchiveObjectWithData(NSKeyedArchiver.archivedDataWithRootObject(self)) as? UIView
}
}
我刚刚在 Playground 中尝试了这个简单的代码来检查复制 View 是否有效并且它没有指向相同的 View :
let originalView = UIView(frame: CGRectMake(0, 0, 100, 50));
originalView.backgroundColor = UIColor.redColor();
let originalLabel = UILabel(frame: originalView.frame);
originalLabel.text = "Hi";
originalLabel.backgroundColor = UIColor.whiteColor();
originalView.addSubview(originalLabel);
let copyView = originalView.copyView();
let copyLabel = copyView?.subviews[0] as! UILabel;
originalView.backgroundColor = UIColor.blackColor();
originalLabel.text = "Hola";
originalView.backgroundColor; // Returns black
originalLabel.text; // Returns "Hola"
copyView!.backgroundColor; // Returns red
copyLabel.text; // Returns "Hi"
如果扩展不起作用,copyView
和 originalView
将具有相同的 backgroundColor
,同样的情况也会发生在标签。所以有可能是其他部分的问题。
关于ios - 如何在 Swift 中将一个 View 复制到另一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38434785/