2014-11-24 16 views
15

Avevo preso un ViewController con un file di pennino separato. e il mio viewcontroller root iniziale è impostato in storyBoard. Ora il problema è che quando spingo a questo controller di metodi Vista hireachy non vengono chiamati (viewDidLoad, ViewWillApper, ecc) ..Carica UIViewController dal file pennino separato in swift?

Codice (View è caricato ma i metodi non sono chiamando)

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

La stessa cosa se faccio con lo storyboard funziona correttamente.

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

Problema: Con storyboard Vista metodi gerarchici chiedono, ma non con il file nib separata?

risposta

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

@SidShah è il problema evidente Quello che ho trovato nel codice. è necessario avviare un 'OfferDetailViewController' piuttosto che un 'UIViewController'. Potrebbe essere necessario risolvere questo problema prima di risolvere il problema – aelam

+0

Ok capito .. grazie –

+0

Nel mio caso questo richiede 1,5 secondi per caricare, qualsiasi soluzione per questo problema ?? Grazie – ilesh

10

Ecco un bel approccio generico ...

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

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

non viene compilato. cambia className() in "String (che descrive: self)" –

+0

@AaronBratcher Grazie. Ho scritto un'altra estensione dal mio progetto. Aggiornato. –

Problemi correlati