Ich habe gerade dieses selbe Problem gelöst - und die Antworten oben sind fast richtig, sie haben nur vergessen, den Delegierten zu setzen.
Ich habe einen Stammansicht-Controller, der die Größe einer Liste anzeigt, einen untergeordneten Ansichtscontroller aufruft, der die Größe einer Liste ändern kann, und die Größe bei der Rückkehr aktualisieren muss.
Wenn ich meine Eltern Ansicht (SettingsView unten) erstellen und es als Root-Ansicht eines UINavigationController hinzufügen, ich sicherstellen, dass die UINavigationController des Delegierten setzen, bevor ich die Ansicht angezeigt werden - das ist der Schlüssel Teil:
SettingsView *sv = [[SettingsView alloc] initWithNibName:@"SettingsView" bundle:nil];
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:sv];
[nc setDelegate:sv];
In der übergeordneten Ansicht, implementieren das UINavigationControllerDelegate Protokoll:
@interface SettingsView : UIViewController <UINavigationControllerDelegate>
und die willShowViewController Methode bieten:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
// Your code to update the parent view
}
Dies wird aufgerufen, nachdem die untergeordnete Ansicht geschlossen wurde und bevor die übergeordnete Ansicht erneut angezeigt wird.
Wow danke, hatte das gleiche Problem. – drew010
Vergessen Sie nicht, die richtige Antwort zu akzeptieren. –
ur Beobachtung war sehr wichtig .... unforgiven3 Antwort ist richtig, aber wenn u das UINavigationControllerDelegate Protokoll in dem Viewcontroller, wo ur Berufung nicht implementieren willShowViewController es wird nie funktioniert, und auch die Eltern Viewcontroller halten ur beschweren Senden „Viewcontroller __strong zu Parameter der inkompatiblen Typ-ID –