Acabo de resolver este mismo problema, y las respuestas anteriores son casi correctas, simplemente se olvidaron de configurar el delegado.
Tengo un controlador de vista raíz que muestra el tamaño de una lista, llama a un controlador de vista secundaria que puede alterar el tamaño de una lista, y debe actualizar el tamaño a la devolución.
Cuando creo mi vista padre (SettingsView más adelante), y añadir a ella como la vista raíz de un UINavigationController, me aseguro de establecer el delegado del UINavigationController antes de que aparezca la vista - que es la parte clave:
SettingsView *sv = [[SettingsView alloc] initWithNibName:@"SettingsView" bundle:nil];
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:sv];
[nc setDelegate:sv];
En la vista de los padres, implementar el protocolo UINavigationControllerDelegate:
@interface SettingsView : UIViewController <UINavigationControllerDelegate>
y proporcionar el método willShowViewController:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
// Your code to update the parent view
}
Esto se invoca después de que se cierra la vista secundaria y antes de que se vuelva a mostrar la vista principal.
Wow gracias, tuve el mismo problema. – drew010
No se olvidó de aceptar la respuesta correcta. –
uestra observación fue muy importante ... la respuesta unforgiven3 es correcta, pero si no implementa el protocolo UINavigationControllerDelegate en ViewController donde su llamada willShowViewController nunca funcionará, y el ViewController padre seguirá quejándose de que envíe "ViewController __strong a parámetro de id. de tipo incompatible –