什么等同于Swift中的loadNibNamed

时间:2014-06-10 05:11:11

标签: swift

我正在将我的Objective-C代码转换为Swift,并且想知道这个代码的swift等价是什么

[[[NSBundle mainBundle] loadNibNamed:@"Games-New" owner:nil  
options:nil] firstObject]; 

感谢。

10 个答案:

答案 0 :(得分:28)

也许API已经改变了。 loadNibNamed的第三个参数不再是options,而是topLevelObjects。以下代码适用于我:

var objects: NSArray?
NSBundle.mainBundle().loadNibNamed("MyView", owner: self, topLevelObjects: &objects)

答案 1 :(得分:16)

NSBundle.mainBundle().loadNibNamed("Games-New", owner: nil, options: nil)[0]

答案 2 :(得分:13)

这是一个UIView扩展

public extension UIView {

    public class func instantiateFromNib<T: UIView>(viewType: T.Type) -> T {
        return NSBundle.mainBundle().loadNibNamed(String(describing: viewType), owner: nil, options: nil)?.first as! T
    }

    public class func instantiateFromNib() -> Self {
        return instantiateFromNib(self)
    }

}

用法

let awesomeView = AwesomeView.instantiateFromNib()

OR

let awesomeView = UIView.instantiateFromNib(AwesomeView.self)

答案 3 :(得分:7)

Swift 3

<小时/> 的名称
nib文件的名称,不需要包含.nib扩展名。

<强>所有者
要指定为nib的File的Owner对象的对象。

选项
包含打开nib文件时使用的选项的字典。

<强>第一
如果你没有先定义然后抓取所有视图..所以你需要在集合frist内抓取一个视图。

Bundle.main.loadNibNamed("yourUIView", owner: self, options: nil)?.first as! yourUIView

答案 4 :(得分:6)

使用它来加载你的笔尖。

let myView = NSBundle.mainBundle().loadNibNamed("MyView", owner: nil, options: nil)[0] as UIView

然后您可以像往常一样将其添加到视图中。

view.addSubview(myView)

答案 5 :(得分:2)

对于Swift 3:

Bundle.main.loadNibNamed("Games-New", owner: nil, options: nil)?[0]

仅供参考:在Swift 3中(非完全)删除了NS

答案 6 :(得分:2)

在文档中,macOSiOS看起来有所不同。

对于 macOS Swift 4 ,以下内容对我有用:

func loadFromNib(_ nibName: String) -> NSView? {
    var topLevelObjects: NSArray?
    if Bundle.main.loadNibNamed(NSNib.Name(rawValue: nibName), owner: self, topLevelObjects: &topLevelObjects) {
        return topLevelObjects?.first(where: { $0 is NSView } ) as? NSView
    } else {
        return nil
    }
}

答案 7 :(得分:1)

在Swift 4中, NSBundle.mainBundle 更改为 Bundle.main.loadNibNamed

Bundle.main.loadNibNamed("MyDenizbankLoading", owner: nil, options: nil)![0]

答案 8 :(得分:0)

这是在Swift 4中的macOS中如何做的

<强>注册

collectionView.register(NSNib(nibNamed: NSNib.Name(rawValue: "Cell"), bundle: nil)!,
                            forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "Cell"))

<强>出列

func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {

  let item = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "Cell"), for: indexPath)
  guard let cell = item as? Cell else { return item }

  let value = values[(indexPath as NSIndexPath).item]
  cell.imageView?.setImage(url: value, placeholder: Image(named: NSImage.Name(rawValue: "placeholder")))

  return cell
 }

答案 9 :(得分:0)

这对我有用

public protocol Scene {
    associatedtype Content: View
    var view: Content { get }
}

struct V: Scene {
    var view: some View {
        EmptyView()
    }
}