2014-11-24 88 views
15

我有一个ViewController与单独的nib文件。并且我的初始根视图控制器在storyBoard中设置。现在的问题是,当我推到这个控制器查看hireachy方法不会被调用(viewDidLoad中,ViewWillApper等)..在swift中从单独的nib文件加载UIViewController?

代码(查看加载,但方法不调用)

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); 

问题:随着故事板视图层次方法调用,但不能与单独的榫文件?

回答

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

@SidShah这是我在你的代码已经找到了明显的问题。你需要初始化一个'OfferDetailViewController'而不是'UIViewController'。你可能需要解决这个问题之前,你解决了这个问题 – aelam 2014-11-24 06:56:45

+0

好吧,得到它..谢谢 – 2014-11-24 06:59:21

+0

在我的情况下这需要1.5秒的加载,任何解决方案这个问题??谢谢 – ilesh 2016-07-27 07:48:50

10

这里是一个很好的通用方法...

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

let vc : OfferDetailViewController = OfferDetailViewController.loadFromNib() 
+0

不能编译。将className()更改为“String(describe:self)” – 2017-05-31 18:25:47

+0

@AaronBratcher谢谢。我从我的项目中写了另一个扩展。更新它。 – 2017-06-01 18:21:41

相关问题