一尘不染

在Swift中将xib分配给UIView

swift

在目标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
}

不能在方法中分配给自身,将显示错误。现在,我的方法是创建一个视图,并将从笔尖加载的视图添加到其中。有人有更好的主意吗?


阅读 296

收藏
2020-07-07

共1个答案

一尘不染

对于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")

您将能够在任何视图上重用该方法。

2020-07-07