iphone ios uiview uiviewcontroller

iphone - viewcontroller swift



loadView de UIViewController no llamado (3)

Quiero configurar un UIViewController dentro de NavigationController mediante programación, sin embargo, se llama al método loadView o viewDidLoad.

Este es mi código en el delegado de la aplicación:

MyViewController *viewController = [[MyViewController alloc] init]; UIView *view = [[UIView alloc] initWithFrame:window.frame]; viewController.view = view; UINavgationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController]; [window addSubview:[navController view]; [window makeKeyAndVisible];

Cuando inicio la aplicación veo una barra de navegación, pero no hay llamadas a loadView. ¿Qué me estoy perdiendo? Pensé que se llama a loadView después de llamar a la view

Editar

MyViewController *viewController = [[MyViewController alloc] init]; [viewController view]; // doesn''t look right? UINavgationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController]; [window addSubview:[navController view]; [window makeKeyAndVisible];

editado hacia el comentario de Jonah, pero loadView aún no recibe una llamada.


Un UIViewController creará su vista (cargándola desde una punta o implementando -loadView ) cuando se llama al getter de view del controlador y su vista es actualmente nil .

En el código que se muestra, nunca invocas el getter de la propiedad view, solo su setter.

Además, está asignando la vista del controlador desde el delegado de su aplicación. Se espera que UIViewController s creen sus propias vistas a pedido, y no las proporcione alguna otra clase. Este enfoque le causará problemas más adelante cuando se dé cuenta de que el controlador descarga su vista e intenta recrearlo en respuesta a las advertencias de memoria. Deje que su controlador cree su vista, no intente pasarlo.


tal vez no estabas enfrentando este problema ... pero el otro día encontré el mismo problema irritante .. loadView, viewDidLoad y viewWillAppear no fueron llamados en mi UIViewController.

Mi problema era v. Simple pero un poco complicado de atrapar si no tienes mucho cuidado. En lugar de escribir

-(void) loadView

Escribí:

-(void) loadview

Tenga en cuenta que esto no disparará ninguna advertencia. La diferencia de "V" y "v" en loadView se puede perder fácilmente. Y, obviamente, dado que loadView no se llamó, viewDidLoad / viewWillAppear tampoco se llamará, ya que no se cargó ninguna vista (no estoy usando ninguna semilla ... creando la vista programáticamente).

-Anshu


Otro punto a tener en cuenta es si defines un

@synthesize view;

sin un @property coincidente en su implementación, esto puede dar como resultado que las llamadas al controlador de su vista vuelvan nulas y no se llame al método loadView.