Sam'in çözümü, farklı demetleri dikkate almamasına rağmen (NSBundle: forClass kurtarmaya geliyor) ve manuel yükleme, yani yazım kodu gerektirmesine rağmen zaten harika.
Xib Outlet'leriniz için tam destek istiyorsanız, farklı Paketler (çerçevelerde kullanın!) Ve Storyboard'da güzel bir önizleme elde edin:
// 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'inizi her zamanki gibi kullanın, yani Outlets'i File Owner'a bağlayın ve File Owner sınıfını kendi sınıfınıza ayarlayın.
Kullanım: Sadece kendi View sınıfınızı NibLoadingView'dan alt sınıflayın ve sınıf adını Xib dosyasındaki File Owner'a ayarlayın
Artık ek kod gerekmez.
Kredinin vadesi gelen krediler: GH'de DenHeadless'tan küçük değişiklikler yaparak bunu çatalladım. Özgeçmişim: https://gist.github.com/winkelsdorf/16c481f274134718946328b6e2c9a4d8