2013-03-14 51 views
0

我想允許一些視圖在我的應用程序中旋轉(只有兩個),我已經做到這一點,然後成功,繼承UINavigationcontroller並覆蓋相應的方法。這次的問題是我正在使用第三方項目來創建一個.xib文件導航控制器(不是以編程方式)。我改變了.xib文件中的類,以便使用我的自定義導航控制器,但它確實如此,但出於某種原因,忽略了像shouldAutorotate和supportedInterfaceOrientations這樣的重寫方法iOS 6旋轉問題與UINavigationcontroller從XIB

任何想法?

感謝

回答

0

我仍然在尋找一個更優雅的方式來處理這個問題,但我會分享一些黑客已經爲我工作。如果你發現更好的東西,請讓我知道。

在複雜導航樹的應用程序中,對我來說工作正常的一種方法是安裝第一個導航控制器或第一個視圖控制器的自定義子類,如果您的應用程序中沒有導航控制器。那就是將要接收shouldAutoRotate調用的那個。

聽起來你已經做到了。

現在您需要在shouldAutoRotate部分插入您自己的邏輯。我所做的是在appDelegate中使用BOOL作爲視圖控制器應該自動旋轉的地方來存儲。基本上,它的工作原理是這樣的:

APPDELETE:在棧頭

@property (nonatomic,assign) BOOL allowAutoRotationForThisViewController; 

自定義導航控制器:

- (BOOL)shouldAutorotate { 
    AppDelegate *a = [[UIApplication sharedApplication] delegate]; 
    return a.allowAutoRotationForThisViewController; 
} 

旋轉視圖控制器:

-(void) viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    AppDelegate *a = [[UIApplication sharedApplication] delegate]; 
    a.allowAutoRotationForThisViewController = YES: 

} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    AppDelegate *a = [[UIApplication sharedApplication] delegate]; 
    a.allowAutoRotationForThisViewController = NO: 
} 

我不知道爲什麼他們在ios6中改變了這一點,似乎要困難得多,特別是當你有複雜的navigati結構上。我有一個應用程序在堆棧頂部的「幻燈片」類型控制器,一個tabbar控制器和一堆導航控制器。試圖挑選所有這些以獲得堆棧底部的Web視圖以進行輪換,或讓它們響應頂級控制器是非常複雜的。所以我使用了這種方法。

現在,有一件事你必須考慮 - 如果BOOL轉爲NO,那麼將不會發生旋轉 - 因此一個問題就是如果您的可旋轉視圖控制器在其旋轉時彈回到其父項。然後,父母將被旋轉,旋轉視圖控制器將旋轉值設置爲no。我在我的方法中解決了這個問題,除非它是在肖像模式下阻止它解散 - 基本上我在橫向模式下禁用了「後退」按鈕。

這是這樣的: - 視圖來在屏幕上 - 設置旋轉YES - 旋轉發生 - 在這一點上,即旋轉將得到以下選擇調用視圖:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

因此,在該調用中,您可以配置您的本地視圖並執行任何您需要執行的操作來設置視圖的方向更改 - 比如self.navigationController。hidesBackButton = YES;

希望能有所幫助,就像我說的那樣,它有點破解,我在尋找更優雅的東西。

祝你好運

+0

感謝您的回答,非常完整。但是,我面臨的問題是我的自定義類的shouldAutorotate方法從未被調用。在我的可旋轉視圖控制器中,我打印導航控制器的值(到控制檯)以便知道是否正在使用我的自定義類並且看起來是正確的。但由於某種原因(我認爲與來自.xib文件的導航控制器相關),我的自定義類中的覆蓋方法未被調用。問題實際上是我打開目標配置中的所有方向,但想要避免在某些視圖中旋轉 – aprunedamtz 2013-03-15 19:46:57

+0

請忽略我以前的評論。我的自定義類中的方法工作正常,問題是第三方VC添加了我的導航控制器,如下所示:[self.view addSubview:[customNavController view]],我得到了這個帖子的想法:http:// stackoverflow .com/questions/12775265/ios-6-shouldautorotate-is-not-being-being-being-called-called。所以,我想在某些視圖控制器中更改第一個VC的自轉行爲。我用你的代碼覆蓋第三方VC(而不是自定義的navController),並像魅力一樣工作。謝謝! – aprunedamtz 2013-03-15 20:56:07