UINavigationControllerDelegate-Methoden werden beim Aufruf eines View-Controllers, der die aktuelle Ausrichtung nicht unterstützt, nicht aufgerufen.UINavigationControllerDelegate-Methoden nicht aufgerufen (Demo-Code auf GitHub)
Ich habe einen UINavigationController als root-View-Controller meiner App (erste Ansicht Controller in meinem Storyboard).
Lassen Sie sagen, ich mit diesem einen Viewcontroller A Push zur Orientierung:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
daher nicht unterstützen wir alle Landscape-Modus. Hinzu kommt, dass wir einen anderen Viewcontroller mit Code drücken:
@interface B : UIViewController <UINavigationControllerDelegate>
@end
@implementation B
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES; // any orientation supported
}
- (void)viewDidLoad {
[super viewDidLoad];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
UINavigationController *nc = (UINavigationController*)appDelegate.window.rootViewController;
nc.delegate = self;
}
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// not always called...
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
// not always called...
}
@end
Nun, wenn ich mein iPhone im Hoch- und ich schieben View-Controller B oben auf A, über einige Berührungsereignis, dann tippen Sie auf die Schaltfläche „Zurück“ in Die Navbar, alles ist in Ordnung und die Delegate-Methoden werden aufgerufen (ich mache einige Sachen dort).
Aber, wenn ich Ansicht B ansicht, ich zu Landschaft drehen, und dann drücken Sie die Zurück-Taste, diese Delegate Methoden werden nicht aufgerufen !! Was ist der Zweck, einen Delegaten für den UINavigationController zu setzen, wenn die Methoden manchmal, aber nicht anders aufgerufen werden? Sicher mache ich etwas falsch.
Ich versuche, den Delegaten in andere Klasse, wie AppDelegate oder meine MainView, nichts zu ändern.
Irgendwelche Ideen?
Demo-Code hier:git://github.com/malaba/NavBarTest.git
Von einer grundlegenden Master-Detail-Vorlage, modifiziert wie oben.
Wie zeige ich meinen Standpunkt? Hier ist die Schritt-für-Schritt:
- eine Zeile hinzufügen in Master View (die + rechts oben)
- dann eine Linie berühren zu gehen, um Details
- Siehe Log in Ausgabe anzeigen zeigt sich
- Hit back button (beschriftet mit "Master"), wieder log erscheint.
Jetzt versuchen, das iPhone (oder Simulator) in Details Ansicht zu drehen, dann gehen Sie „zurück“ und sehen kein Protokoll zeigt sich ?!
was ist diese Sprache? Obj-C++? Ich übersetze jetzt ... – malaba
Es ist C#, mit MonoTouch. –