在每個視圖的shouldAutorotate...
中,您可以在根視圖控制器中調用一個方法來檢查當前正在顯示的內容。如果顯示選項卡3的深層視圖,它將返回YES,否則返回NO,視圖將返回相同。
編輯 - 每user798719的要求更詳細地:
你的根視圖控制器知道哪些視圖在顯示。您將一種方法添加到根視圖控制器- (BOOL) isDeepLevelTab3Displayed;
。該方法檢查是否顯示選項卡3的深層視圖,如果是,則返回YES,否則返回NO。
每個子視圖控制器的shouldAutorotate…
方法將得到一個裁判根控制器,以便它可以調用isDeepLevelTab3Displayed.
如果您使用的是導航式控制器,可以得到這樣的裁判(self
是子控制器):
NSArray *arrayOfControllers = [self viewControllers];
UIViewController *rootController = [arrayOfControllers objectAtIndex:0]; // per UIViewController class ref, root controller is at index 0
或者你可以得到什麼在你的項目是這樣的:
YourProjectAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
UIViewController *rootController = appDelegate.rootController; // or appDelegate.intermediateClass1.intermClass2.rootController — however you set up your project
所以每個子控制器這樣做:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
UIViewController *rootController = [[self viewControllers] objectAtIndex:0];
return [rootController isDeepLevelTab3Displayed];
}
因此,每子控制器將返回YES自轉時應該發生,滿足你提到你的問題的最終要求。
但是,如果您的所有子控制器都是UINavigationController的實例,則可以通過調用visibleViewController
直接確定當前正在顯示哪個視圖。那麼你只需要一種檢查其身份的方法。
你可以檢查控制器的nibName
或title
,例如,對一個常數或整數屬性intControllerIdentity
在控制器的initWithNibName…
整數屬性的方案是最好的添加到您的所有控制器和設置這些參數,因爲它贏得了如果您稍後更改nibName或標題,則不會受到影響。
你會添加常數一些類,其.h文件是由所有的控制器(或者,如果所有的控制器都是一樣的類的實例,擺在那類的.h文件這些常量)進口:
#define kFooController 1
#define kBarController 2
#define kRotatableController 3
而且你會設置這樣的:
self.intControllerIdentity = kRotatableController;
,並檢查它是這樣的:
if (self.intControllerIdentity == kRotatableController)
希望有所幫助。 但用評論眼睛評估這個增加的細節;我曾與自動旋轉,但尚未與導航控制器。
檢查此http://stackoverflow.com/questions/2731136/view-controllers-inside-tab-bar-controller-not-auto-resizing-on-rotation – mChopsey 2012-04-12 16:03:49