2010-10-17 18 views
5

Tengo un ViewController que se suma a otros subvistas que han subclase UIViewControllersViewDidAppear/viewWillAppear no siendo llamado

por lo que su siguiente manera:

mainViewController 
     | 
    v---------v 
subVC1 subVC2 

Y tampoco subVC1 o subVC2 tienen la viewDidAppear/viewWillAppear disparó contra ¿ellos? El controlador de vista principal está creando en el delegado de la aplicación y se ve agregado allí también a la ventana.

He aquí un proyecto de Xcode para mostrar mi problema: http://www.qfpost.com/download.do?get=92f03538907e72665ea794d98ff8392b

Respuesta

5

He echado un vistazo a su código. El problema es que se llama a viewWillAppear/viewDidAppear cuando la vista se agrega a la ventana, no a una de su subvista. Es posible que desee usar viewDidLoad para eso.

+0

Realmente, nunca he tenido que hacer esto antes? –

+0

En su ejemplo, agrega la vista de su subVC2 a la vista de su ViewController principal. Eso no llama a viewDidAppear, porque se llama a este método cuando lo agregas a tu objeto de "ventana" de la aplicación. Otros dos errores que cometió en su ejemplo: inicializa su subVC2 con el método "init". Creo que quieres usar el que construiste en la punta. Necesita usar el método initWithNibName: bundle: Por último, es posible que desee liberar el subVC2 cuando haya agregado su subvista, ya que no conserva ninguna referencia al mismo. – Julien

+0

Oh, no quise utilizar una plumilla, pero no debería lanzar subVC2 porque solo pasé la vista del subvc2 al método de adición de la vista, no al controlador de vista completo. También es así sobre el VW/DA en el iPhone, porque juro que esto no me pasó antes. –

1

En primer lugar, ¿está seguro de que realmente necesita estar haciendo lo que estás haciendo con esta jerarquía de UIViewControllers? ¿Por qué no puede su MainViewController lidiar con las vistas que su subVC1 y subVC2 son responsables?

En segundo lugar, su viewWillAppear/viewDidAppear se llamará cuando USTED escriba el código para llamarlos desde su MainViewController. Sin saber nada más acerca de su diseño, no es posible aconsejar cuándo debe llamarlos, pero si las vistas de los sub controladores deben estar siempre visibles cuando la vista principal está visible, entonces probablemente tenga sentido llamarlos. desde los métodos viewWillApare/viewDidAppear de su mainViewController.

Cuestiones relacionadas