[英]UITabBarController force rotate when switching view
我創建了UITabBarController的子類,以便在切換時處理視圖的autoRotation,因為我需要一些視圖為縱向視圖,而其他視圖則為橫向視圖。
如果我旋轉設備,那么一切都會按預期進行,因此橫向設備將旋轉為橫向設備並保持該狀態。 我遇到的問題是視圖顯示時不會自動執行旋轉。 因此,將本應為橫向的視圖顯示為縱向,直到將設備旋轉至橫向為止,此時它們會將其鎖定為橫向模式。
我想知道是否有人可以告訴我如何在更改視圖時強制旋轉,所以當我切換到風景視圖時,它將立即旋轉到該方向嗎?
抱歉,是否已經有人問過一百萬遍了,但是我似乎找不到線程。
編輯,我找到了以下代碼:
UIViewController *c = [[UIViewController alloc]init];
[self presentModalViewController:c animated:NO];
[self dismissModalViewControllerAnimated:NO];
[c release];
這確實執行了旋轉,但是我不確定在哪里調用它,因為標簽欄控制器不會調用諸如init / viewDidLoad之類的東西,顯然將其放入viewDidAppear等會導致無限循環。
請問有什么幫助嗎?
我想出了解決我的問題的方法,並將其張貼在這里,以防萬一其他人想要它。 我警告您,現在可以解決此問題,但是我找不到答案,所以這是我所能做的最好的事情。
首先將UITabBarControllerDelegate添加到要在其中創建TabBarController的協議中,我正在使用AppDelegate,因此請執行以下操作:
@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
這允許訪問以下TabBar協議:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
基本上,只要按下TabBarItems之一(底部的按鈕),就會調用此方法。 在此函數中,我提取了viewControllerNibFile的名稱,因為這就是它們的名稱(如果您不想擔心命名約定,則可以使用view.tag),並按如下所示將事件發布到通知中心:
NSString *notificationName;
if ([viewController.nibName isEqualToString:@"IntroViewController"])
notificationName = [NSString stringWithString:@"IntroViewChange"];
NSLog(@"%@", notificationName);
[[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:nil];
然后在類中設置一個偵聽器,該偵聽器將調用以下事件:
- (void)updateViewRotation
{
UIViewController *c = [[UIViewController alloc]init];
[self presentModalViewController:c animated:NO];
[self dismissModalViewControllerAnimated:NO];
[c release];
}
就像之前提到的那樣,這是一項艱巨的工作,它看起來很笨重,但可以滿足我的需求。 如果有人想提供一些更有效的代碼,我會很樂意接受。
@Elliott,我給你一個贊成的答案,因為它比我嘗試過的任何其他解決方案都更好,但這是一個簡化。 無需使用通知,只需將其放入didSelectViewController中即可:
if ( [viewController respondsToSelector:@selector(updateViewRotation)] ) {
[viewController performSelector:@selector(updateViewRotation)];
}
僅當需要特別注意的viewController是選項卡上的第一個時,這才起作用。
另外,針對iOS 6棄用版本進行更新:
- (void)updateViewRotation
{
UIViewController *vc = [[UIViewController alloc] init];
[self presentViewController:vc animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.