In den einzelnen Ansichten shouldAutorotate...
können Sie eine Methode im Stammansicht-Controller aufrufen, die überprüft, was gerade angezeigt wird. Wenn die Tiefenansicht für Registerkarte 3 angezeigt wird, gibt sie YES zurück, andernfalls NEIN, und die Ansichten werden wiederum gleich zurückgegeben.
Bearbeiten - mehr Details pro user798719 Wunsch:
Ihre Wurzel-View-Controller kennt Ansicht, die ist auf dem Display. Sie fügen dem Stammansicht-Controller - (BOOL) isDeepLevelTab3Displayed;
eine Methode hinzu. Die Methode prüft, ob die Tiefenansicht für Registerkarte 3 angezeigt wird, und gibt in diesem Fall YES zurück, andernfalls NO.
jedes Teil shouldAutorotate…
Methode des View-Controller einen ref an den Root-Controller erhalten wird, so dass es isDeepLevelTab3Displayed.
aufrufen Wenn Sie ein Navigations-Stil-Controller verwenden, können Sie die ref wie diese erhalten (self
ist die Sub-Controller):
NSArray *arrayOfControllers = [self viewControllers];
UIViewController *rootController = [arrayOfControllers objectAtIndex:0]; // per UIViewController class ref, root controller is at index 0
Oder Sie etwas in Ihrem Projekt wie dieses erhalten könnte:
YourProjectAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
UIViewController *rootController = appDelegate.rootController; // or appDelegate.intermediateClass1.intermClass2.rootController — however you set up your project
Also jedes Sub-Controller würde dies tun:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
UIViewController *rootController = [[self viewControllers] objectAtIndex:0];
return [rootController isDeepLevelTab3Displayed];
}
Daher jeder Subzentrale würde YES zurück, wenn die Autorotation passieren sollte, die Erfüllung der Anforderung, die Sie am Ende Ihrer Frage erwähnen.
Wenn jedoch alle Ihre Untersteuerungen Instanzen von UINavigationController sind, können Sie durch Aufruf von visibleViewController
bestimmen, welche Ansicht gerade angezeigt wird. Dann brauchen Sie nur eine Möglichkeit, ihre Identität zu überprüfen.
Sie könnten nibName
oder title
, zum Beispiel der Controller überprüfen, gegen eine Konstante oder eine ganze Zahl Eigenschaft hinzufügen intControllerIdentity
auf alle Ihre Controller und setzte sie in den initWithNibName…
des Controllers Die integer-Eigenschaft Schema könnte am besten sein, weil sie gewonnen Wenn Sie später den nibName oder den Titel ändern, sind Sie davon nicht betroffen.
Sie Konstanten bis zu einem gewissen Klasse, deren h hinzufügen würde Datei von allen Steuerungen importiert wird (oder, wenn alle Controller Instanzen derselben Klasse sind, diese Konstanten h Datei setzen in dieser Klasse):
#define kFooController 1
#define kBarController 2
#define kRotatableController 3
Und Sie es wie folgt festgelegt würden:
self.intControllerIdentity = kRotatableController;
Und es wie folgt überprüfen:
if (self.intControllerIdentity == kRotatableController)
Hoffe das hilft. Aber bewerten Sie dieses zusätzliche Detail mit einem kritischen Auge; Ich habe mit Autorotation gearbeitet, aber noch nicht mit Navigationscontrollern.
prüfen diese http://stackoverflow.com/questions/2731136/view-controllers-inside-tab-bar-controller-not-auto-resizing-on-rotation – mChopsey