uiview - 在 Swift 中将 xib 分配给 UIView

标签 uiview swift xib

在 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/

相关文章:

objective-c - 向下钻取应用程序中的主页按钮

ios - 如何向 UIView 添加大小调整 handle ?

iphone - 加载 xib 文件

ios - connectionWithMediaType 返回零

ios - 是否有回调方法告诉 UITableViewController 何时完成创建 UITableView 的单元格?

cocoa - xib 文件显示在错误的目标中

ios - 无法从我自己的 Pod 加载 NIB

iphone - 如何绘制带阴影但不旋转阴影的旋转 UIView

ios - 使用 PageViewController 来处理大量页面,例如相机胶卷 ImageView ?

ios - 如何防止在文本字段中输入特定字符?