考慮顯示UIViewController需要完全重定向功能。 這將是常見的,在我的愚見判斷正確的方式來處理這種情況。
要回答你的主題:是的,如果你想讓任何標籤式viewController允許重定向,它必須返回YES
。對於您的UINavigationControllers
的堆棧中的viewController也是如此。因此,對於這些組合也是如此。
從蘋果公司的技術說明在這個問題上:
爲什麼不會我的UIViewController旋轉與設備?
UITabBarController中的所有子視圖控制器或 UINavigationController不同意共同的方向集。若要 確保您的所有子視圖控制器正確旋轉,您必須爲每個視圖執行shouldAutorotateToInterfaceOrientation代表每個選項卡或導航級別的控制器。每個人必須同意 在相同的方向旋轉發生。也就是說,他們全部 應該爲相同的方向位置返回YES。
在使用模態呈現視圖控制器的情況下是沒有你的選擇 - 這裏來的另一種方式......
還有一種解決方案可能似乎有點「哈克」,而是在爲我工作過去。我會以非常非常「黑客」的方式起草它來簡化答案。
在shouldAutorotateToInterfaceOrientation內:toInterfaceOrientation實現所有viewControllers,返回一個全局值。根據當前顯示的viewController的需要更改該全局值。即使據說viewController只被詢問一次,這個常見的謠言已經被證明是不真實的。所以這裏是超級黑客;
您的導航堆棧中的所有視圖控制器應實現shouldAutorotate-方法是這樣的:
- (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)toInterfaceOrientation
{
extern BOOL gSouldAutorotateToAnyOrientationFlag;
if (gShouldAutorotateToAnyOrientationFlag)
{
return YES;
}
return UIInterfaceOrientationIsPortrait(toInterfaceOrientation);
}
現在,在某處你的應用程序,還應當聲明並實例化全局標誌 - 你可以把這個醜陋的全局標誌您的應用程序,委託執行中,正下方的進口和@implementation塊以上:
BOOL gShouldAutorotateToAnyOrientationFlag = NO;
內,都應該在肖像模式下只顯示所有viewControllers,設置該標誌對NO - 如。在viewWillAppear;
- (void)viewWillAppear:(BOOL)animated
{
extern BOOL gShouldAutorotateToAnyOrientationFlag;
gShouldAutorotateToAnyOrientationFlag = NO;
}
在本應該在任何方向被示出的的viewController/s時,設置向YES該標誌 - 再次內viewWillAppear中;
- (void)viewWillAppear:(BOOL)animated
{
extern BOOL gShouldAutorotateToAnyOrientationFlag;
gShouldAutorotateToAnyOrientationFlag = YES;
}
這樣,每當整個導航堆棧被要求其定向能力時,都會給出正確的答案。根據我的經驗,整個堆棧被反覆詢問,答案沒有被緩存,因此當我需要時,我的黑客工作。儘管如此,謠言似乎普遍存在,這些答案以某種方式被緩存,因此,在某些情況下,謠言可能是有效的 - 因此,如果這不適用於您(或者甚至是投下的投票:D),我將不負責任。
在哪裏可以聲明這個全局變量(BOOL shouldAutorotateToAnyOrientationFlag) – Steve
任何地方 - 例如在你的應用程序代表頂部(呃,我是否建議使用這個黑客應用代表?:D)。請注意,它不應該被聲明爲類實例變量,因此需要在類實現之外進行聲明。 – Till
喜歡在.h文件的頂部? @interface聲明之前的某處? – Steve