2011-10-27 72 views
0

我正在編程創建基於標籤欄的應用程序。在應用中:didFinishLaunchingWithOptions(應用程序委託)方法我已經把:如何在選項卡欄中啓用橫向導航+ NavigationControllers應用程序?

self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 

SearchViewController *search_vc = [[[SearchViewController alloc] init] autorelease]; 
SearchBookmarksViewController *search_bookmarks_vc = [[[SearchBookmarksViewController alloc] init] autorelease]; 
ItemsBookmarksViewController *items_bookmarks_vc = [[[ItemsBookmarksViewController alloc] init] autorelease]; 
AboutUsViewController *aboutus_vc = [[[AboutUsViewController alloc] init] autorelease]; 

UINavigationController *search_nav = [[[UINavigationController alloc] initWithRootViewController:search_vc] autorelease]; 
UINavigationController *search_bookmarks_nav = [[[UINavigationController alloc] initWithRootViewController:search_bookmarks_vc] autorelease]; 
UINavigationController *items_bookmarks_nav = [[[UINavigationController alloc] initWithRootViewController:items_bookmarks_vc] autorelease]; 
UINavigationController *aboutus_nav = [[[UINavigationController alloc] initWithRootViewController:aboutus_vc] autorelease]; 

NSArray vc_stack = [NSArray arrayWithObjects:search_nav,search_bookmarks_nav,items_bookmarks_nav,aboutus_vc,nil]; 

tabBarController.viewControllers = vc_stack; 

[self.window addSubview:tabBarController.view]; 

SearchViewController是基本上表示一個UITableView與當選擇關於所選擇的行顯示詳細信息的行結果的搜索表單。用戶也可以按下「查看照片」按鈕,用UIImageView推動視圖控制器顯示一些照片。

現在,當處理照片視圖時,我不得不處理橫向方向,這在標籤欄應用程序中似乎不太容易工作。你能幫助我們做些什麼來讓這張照片視圖控制器能夠處理橫向方位嗎?

我被告知要shouldAutorotateToInterfaceOrientation方法在這樣每個視圖控制器作出任何視圖,允許橫向返回YES或子類TabBarController,這最後的解決辦法可能會導致我的應用程序被蘋果拒絕。所以我有點搞不清楚該怎麼做...

Thx提前爲您提供幫助!

斯特凡

回答

2

我用兩個的你提到的選項。

  1. 化妝shouldAutorotateToInterfaceOrientation方法在每個實例化返回YES /子類視圖控制器:對於這個工作,你需要確保每一個視圖控制器都有shouldAutorotateToInterfaceOrientation方法返回YES。一種選擇是讓CMD + Shift + F在整個項目中搜索「:UIViewController」,這將向您顯示從UIViewController繼承的所有頭文件的列表,因此在與此相對應的每個實現文件中將shouldAutorotateToInterfaceOrientation設置爲YES頭。 (這是因爲有時你may've包含有一些類,它們的UIViewController繼承和省略到shouldAutorotateToInterfaceOrientation設置爲YES有沒有第三方的代碼)

  2. 子TabBarController:蘋果文檔中說,「這個類是不打算進行子分類「。所以最好避免使用這個選項,我已經使用過它,但是你永遠有可能被Apple拒絕。 (也許不是第一次,但在任何升級)

無論如何,我認爲蘋果不鼓勵的TabBar應用程序進行橫向顯示模式,因爲標籤欄拍了很多畫面上的空間。因此,最好考慮應用程序的體系結構,以查看是否真的需要tabbarcontroller或創建自己的tabbarcontroller控件,如iPhone上的Twitter應用程序。這樣,您可以在lanscape中減少標籤欄的高度。

+0

它工作正常!謝謝 – Steve

3

它非常簡單,你只需要做: -

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 

您的每一個視圖控制器。

1

除了在每個子視圖控制器能夠轉動(這是在默認情況下,如果你在iOS5中開發支持),如果你想接管整個屏幕做類似:

UIInterfaceOrientation toOrientation = self.interfaceOrientation; 

if (self.tabBarController.view.subviews.count >= 2) 
    { 
UIView *transView = [self.tabBarController.view.subviews objectAtIndex:0]; 
UIView *tabBar = [self.tabBarController.view.subviews objectAtIndex:1]; 


if(toOrientation == UIInterfaceOrientationLandscapeLeft || toOrientation == UIInterfaceOrientationLandscapeRight) { 
    transView.frame = CGRectMake(0, 0, 568, 320); 
    self.portraitView.hidden = YES; 
    self.landscapeView.hidden = NO; 
    tabBar.hidden = TRUE; 
    self.wantsFullScreenLayout = YES; 
} 
else 
{ 
    //Designing to accomodate the largest possible screen on an iPhone. The structs and springs should be setup so that the view will remain consistent from portrait to landscape and back to portrait. 
    transView.frame = CGRectMake(0, 0, 320, 568); 
    tabBar.hidden = FALSE; 
    self.portraitView.hidden = NO; 
    self.landscapeView.hidden = YES; 
    self.wantsFullScreenLayout = NO; 
} 
    }` 

更新:

https://stackoverflow.com/a/13523577/1807026

相關問題