Giải pháp của Sam thật tuyệt vời, mặc dù nó không tính đến các gói khác nhau (NSBundle: forClass mang đến giải cứu) và yêu cầu tải thủ công, còn gọi là nhập mã.
Nếu bạn muốn hỗ trợ đầy đủ cho Xib Outlets của mình, các Gói khác nhau (sử dụng trong khung!) Và có được bản xem trước đẹp trong Storyboard, hãy thử điều này:
// 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
}
}
Sử dụng xib của bạn như bình thường, tức là kết nối Outlets với Chủ sở hữu tệp và đặt lớp Chủ sở hữu tệp thành lớp của riêng bạn.
Cách sử dụng: Chỉ cần phân lớp lớp View của riêng bạn từ NibLoadingView & Đặt tên lớp thành Chủ sở hữu tệp trong tệp Xib
Không cần thêm mã nữa.
Tín dụng khi đáo hạn tín dụng: Đã chấm dứt điều này với những thay đổi nhỏ từ DenHeadless trên GH. Gist của tôi: https://gist.github.com/winkelsdorf/16c481f274134718946328b6e2c9a4d8