簡體   English   中英

從swift中單獨的nib文件加載UIViewController?

[英]Load UIViewController from the separate nib file in swift?

我帶了一個帶有單獨nib文件的ViewController。 我的初始根視圖控制器在storyBoard中設置。 現在問題是當我推送到這個控制器時,沒有調用View hireachy方法(ViewDidLoad,ViewWillApper等)。

代碼 (視圖已加載但方法未調用)

var viewController = UIViewController(nibName: "OfferDetailViewController", bundle: nil) as OfferDetailViewController
 self.navigationController?.pushViewController(viewController, animated: true);

如果我使用故事板它的工作正常,同樣的事情。

    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    var viewController = mainStoryboard.instantiateViewControllerWithIdentifier("offer") as OfferDetailViewController     
   self.navigationController?.pushViewController(viewController, animated: true);

問題 :使用storyboard View層次結構方法是調用但不是使用單獨的nib文件?

var viewController = OfferDetailViewController(nibName: "OfferDetailViewController", bundle: nil)

這是一個很好的通用方法......

extension UIViewController {
    class func loadFromNib<T: UIViewController>() -> T {
         return T(nibName: String(describing: self), bundle: nil)
    }
}

let vc : OfferDetailViewController = OfferDetailViewController.loadFromNib()

類型鑄造的解決方案:

extension UIViewController {
    static func initFromNib() -> Self {
        func instanceFromNib<T: UIViewController>() -> T {
            return T(nibName: String(describing: self), bundle: nil)
        }
        return instanceFromNib()
    }
}

享受:

let testVC = TestVC.initFromNib()
testVC.someCustomParam = "someValue"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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