Suponiendo que cargue un controlador de vista desde una punta y decida hacer algo con una de sus subvistas detrás de la escena. En un momento posterior en el tiempo, mostraría la vista de este controlador de vista.Hacer una vista (inicializado desde initWithNibName) cargar toda su subvista
viewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[viewController.someSubview doSomething];
//later on
[mainView addSubview:viewController.view];
El problema es que, no parece el objeto someSubview para ser cargado hasta que aparezca la vista, por lo que el doSomething método no se llama. Hasta ahora mi solución alternativa es llamar a:
[mainView addSubview:viewController.view];
[viewController.view removeFromSuperview];
para inicializar primero las subvistas de viewcontroller. ¿Hay alguna manera más elegante (como un método loadSubviews o algo así) para esta tarea?
Gracias, que lo hizo. – iamj4de
@MarkAmery Apple le dice explícitamente que no llame a -loadView en la documentación: "Nunca debe llamar a este método directamente. El controlador de vista llama a este método cuando se solicita su propiedad de vista pero actualmente es nula. Este método carga o crea una vista y lo asigna a la propiedad de vista ". –
@MikeWeller Buen punto: no había revisado la documentación lo suficiente como para saberlo. Supongo que tenemos que elegir entre uno de dos hacks ligeramente feos, entonces. Por mi parte, probablemente me apegue a 'loadView' solo porque es más explícito, pero reconozco que no es la solución limpia que pensé que era. –