簡體   English   中英

無法從我自己的 Pod 加載 NIB

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM