Решение Сэма уже отличное, несмотря на то, что оно не учитывает различные пакеты (на помощь приходит NSBundle: forClass) и требует ручной загрузки, то есть ввода кода.
Если вам нужна полная поддержка ваших выходов Xib, разных пакетов (используйте в рамках!) И получите хороший предварительный просмотр в раскадровке, попробуйте следующее:
import UIKit
@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 и установите File Owner class в свой собственный класс.
Использование: просто создайте подкласс своего собственного класса View из NibLoadingView и установите имя класса на File's Owner в файле Xib.
Дополнительный код больше не требуется.
Кредиты, причитающиеся к оплате: Разветвлен с небольшими изменениями от DenHeadless на GH. Моя суть: https://gist.github.com/winkelsdorf/16c481f274134718946328b6e2c9a4d8