簡體   English   中英

UITabBarController切換視圖時強制旋轉

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM