Solusi Sam sudah bagus, meskipun tidak memperhitungkan bundel yang berbeda (NSBundle: forClass datang untuk menyelamatkan) dan membutuhkan pemuatan manual, alias mengetik kode.
Jika Anda ingin dukungan penuh untuk Outlet Xib Anda, Bundel yang berbeda (digunakan dalam kerangka kerja!) Dan dapatkan pratinjau yang bagus di Storyboard coba ini:
// NibLoadingView.swift
import UIKit
/* Usage:
- Subclass your UIView from NibLoadView to automatically load an Xib with the same name as your class
- Set the class name to File's Owner in the Xib file
*/
@IBDesignable
class NibLoadingView: UIView {
@IBOutlet weak var view: UIView!
override init(frame: CGRect) {
super.init(frame: frame)
nibSetup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
nibSetup()
}
private func nibSetup() {
backgroundColor = .clearColor()
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
view.translatesAutoresizingMaskIntoConstraints = true
addSubview(view)
}
private func loadViewFromNib() -> UIView {
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: String(self.dynamicType), bundle: bundle)
let nibView = nib.instantiateWithOwner(self, options: nil).first as! UIView
return nibView
}
}
Gunakan xib Anda seperti biasa, yaitu hubungkan Outlet ke Pemilik File dan setel kelas Pemilik File ke kelas Anda sendiri.
Penggunaan: Cukup subkelas kelas Tampilan Anda sendiri dari NibLoadingView & Atur nama kelas menjadi Pemilik File di file Xib
Tidak diperlukan kode tambahan lagi.
Kredit di mana kredit jatuh tempo: Diperbaiki dengan perubahan kecil dari DenHeadless di GH. My Gist: https://gist.github.com/winkelsdorf/16c481f274134718946328b6e2c9a4d8