सैम का समाधान पहले से ही बहुत अच्छा है, इसके बावजूद यह अलग-अलग बंडल को ध्यान में नहीं रखता है (NSBundle: forClass बचाव के लिए आता है) और मैन्युअल लोडिंग, उर्फ टाइपिंग कोड की आवश्यकता होती है।
यदि आप अपने Xib आउटलेट्स के लिए पूर्ण समर्थन चाहते हैं, तो अलग-अलग बंडल (फ्रेमवर्क में उपयोग!) और कहानी का अच्छा पूर्वावलोकन प्राप्त करें:
// 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 का उपयोग करें, अर्थात आउटलेट्स को फ़ाइल स्वामी से कनेक्ट करें और फ़ाइल स्वामी वर्ग को अपनी कक्षा में सेट करें।
उपयोग: NibLoadingView और समूह वर्ग के नाम से सिर्फ उपवर्ग अपने स्वयं के वर्ग देखें फ़ाइल के मालिक XIB फ़ाइल में
अब अतिरिक्त कोड की आवश्यकता नहीं है।
क्रेडिट जहां देय है: जीएच पर डेनहेडलेस से मामूली बदलाव के साथ यह भूल गया। माय गिस्ट: https://gist.github.com/winkelsdorf/16c481f274134718946328b6e2c9a4d8