在 objective c 中,它可以通过以下方式在 init 方法中完成
-(id)init{
self = [[[NSBundle mainBundle] loadNibNamed:@"ViewBtnWishList" owner:0 options:nil] objectAtIndex:0];
return self;
}
但是当我快速执行此操作时
init(frame: CGRect) {
self = NSBundle.mainBundle().loadNibNamed("ViewDetailMenu", owner: 0, options: nil)[0] as? UIView
}
无法在方法错误中分配给自己。 现在我的方法是创建一个 View ,并将从 nib 加载的 View 添加到它。 谁有更好的主意?
最佳答案
适用于 Swift 4
extension UIView {
class func loadFromNibNamed(nibNamed: String, bundle: Bundle? = nil) -> UIView? {
return UINib(
nibName: nibNamed,
bundle: bundle
).instantiate(withOwner: nil, options: nil)[0] as? UIView
}
}
适用于 Swift 3
您可以在 UIView 上创建一个扩展:
extension UIView {
class func loadFromNibNamed(nibNamed: String, bundle: NSBundle? = nil) -> UIView? {
return UINib(
nibName: nibNamed,
bundle: bundle
).instantiateWithOwner(nil, options: nil)[0] as? UIView
}
}
注意:使用 UINib 速度更快,因为它会为您进行缓存。
然后你可以这样做:
ViewDetailItem.loadFromNibNamed("ViewBtnWishList")
并且您将能够在任何 View 上重用该方法。
关于uiview - 在 Swift 中将 xib 分配给 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24370061/