Рішення Сама вже чудово, незважаючи на те, що він не враховує різні пакети (NSBundle: forClass приходить на допомогу) і вимагає завантаження вручну, він же вводить код.
Якщо ви хочете отримати повну підтримку своїх Xib Outlets, різних пакетів (використовуйте в рамках!) Та отримайте приємний попередній перегляд у Storyboard, спробуйте це:
// 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
}
}
Використовуйте свій xib як завжди, тобто підключіть Outlets до власника файлу та встановіть клас File Owner для власного класу.
Використання: Підклас свій власний клас View від NibLoadingView і встановити ім'я класу для файлу власника в файлі XIb
Більше не потрібен додатковий код.
Кредити, на які належить отримання кредиту: це направлено з незначними змінами від DenHeadless на GH. My Gist: https://gist.github.com/winkelsdorf/16c481f274134718946328b6e2c9a4d8