create - uiviewcontroller lifecycle ios
¿Cargar UIViewController desde el archivo nib separado en swift? (3)
Aquí hay un buen enfoque genérico ...
extension UIViewController {
class func loadFromNib<T: UIViewController>() -> T {
return T(nibName: String(describing: self), bundle: nil)
}
}
let vc : OfferDetailViewController = OfferDetailViewController.loadFromNib()
Tomé un ViewController con un archivo de nib separado. y mi control raíz inicial se establece en el storyBoard. Ahora, el problema es que cuando presiono este controlador, no se está llamando a los métodos de View hireachy (ViewDidLoad, ViewWillApper, etc.).
Código (La vista está cargada pero los métodos no llaman)
var viewController = UIViewController(nibName: "OfferDetailViewController", bundle: nil) as OfferDetailViewController
self.navigationController?.pushViewController(viewController, animated: true);
Lo mismo si hago con el guión gráfico está funcionando bien.
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var viewController = mainStoryboard.instantiateViewControllerWithIdentifier("offer") as OfferDetailViewController
self.navigationController?.pushViewController(viewController, animated: true);
Problema : con el guión gráfico, ¿los métodos de jerarquía de vista están llamando pero no con el archivo nib separado?
Solución con tipo de fundición :
extension UIViewController {
static func initFromNib() -> Self {
func instanceFromNib<T: UIViewController>() -> T {
return T(nibName: String(describing: self), bundle: nil)
}
return instanceFromNib()
}
}
disfrute:
let testVC = TestVC.initFromNib()
testVC.someCustomParam = "someValue"
var viewController = OfferDetailViewController(nibName: "OfferDetailViewController", bundle: nil)