create ios objective-c iphone swift uiviewcontroller

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)