[英]Could not load NIB from my own Pod
我的 Pod 框架中有一個 CalendarCell.xib 和一個 CalendarCell.swift UIView 子類。 CalendarCell.swift 有連接到它的視圖的插座。 在運行時,我收到此錯誤:
無法在包中加載 NIB:“NSBundle(已加載)”,名稱為“CalendarCell”
在我的 podspec 文件中,我創建了一個包資源:
s.resource_bundles = { 'Resources' => ['MyFramework/**/*.{xib,xcassets}'] }
如果我安裝我的 Pod,我可以看到 xib 文件,但它崩潰了,現在似乎 xib 文件和它的 swift 對應文件在不同的包中。
任何幫助,將不勝感激!
你是對的,xib 存儲在不同的包中。 您需要找到 xibs 包的路徑並從該包中加載所有 xib,而不是從主包中加載它們。
要在 Swift 3 中找到包的路徑:
let bundle = Bundle(for: YourClass.self)
因此,您必須從該包中加載您的UINib
:
let nib = UINib(nibName: "YourXibName", bundle: bundle)
並將其注冊到您的UITableView
/ UICollectionView
,如果您為此需要它:
self.tableView.register(nib, forCellReuseIdentifier: "cellIdentifier")
這是我在 swift 中使用的,它也適用於主包和框架
extension UINib {
func instantiate() -> Any? {
return self.instantiate(withOwner: nil, options: nil).first
}
}
extension UIView {
static var nib: UINib {
return UINib(nibName: String(describing: self), bundle: Bundle.init(for: self))
}
static func instantiate(autolayout: Bool = true) -> Self {
// generic helper function
func instantiateUsingNib<T: UIView>(autolayout: Bool) -> T {
let view = self.nib.instantiate() as! T
view.translatesAutoresizingMaskIntoConstraints = !autolayout
view.autoresizingMask = []
return view
}
return instantiateUsingNib(autolayout: autolayout)
}
}
初始化視圖使用
let myView = MyView.instantiate()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.