2010-09-03 45 views
1

我剛剛開始使用iPhone SDK進行開發,並且使用UITabBar切換到另一個選項卡時出現問題。使用UITabBar切換到另一個視圖

這是我當前的代碼,它到目前爲止的工作:

myAppAppDelegate *appDel = (myAppAppDelegate *)[[UIApplication sharedApplication] delegate] 
[appDel.tabBar setSelectedViewController:[appDel.tabBar.viewControllers objectAtIndex:5]]; 

但是,如果我去了更多的選項卡,重新安排使用TabBar項目時,viewControllers的指數變化太大。我有什麼可能解決這個問題嗎?

回答

0

首先,如果你發現自己打字:

(myAppAppDelegate *)[[UIApplication sharedApplication] delegate] 

你或許可以從一個更好的設計中獲益。此代碼可能來自視圖控制器,在這種情況下,您將從視圖控制器調用App應用程序委託,並處理您不應該瞭解的內容(選項卡欄)。

更好的設計是委託給應用程序委託,應用程序委託爲您切換選項卡。應用程序委託應該在標籤欄的實際視圖控制器引用(你可以,如果不是通過IB掛鉤這些了),所以你可以調用setSelectedViewController:與正確的對象,而不是索引到標籤欄的數組:

/* Somewhere in the app delegate */ 
- (void)selectFooBarController { 
    [self.tabBar setSelectedViewController:self.fooBarController]; 
} 

現在,如果你不想代表團打擾你可以把在應用程序委託的方法(像上面的)和你原來的代碼就變成了:

myAppAppDelegate *appDel = (myAppAppDelegate *)[[UIApplication sharedApplication] delegate] 
[appDel selectFooBarController]; 

同樣,你將需要添加IBOutlet中的屬性到你的應用程序委託,你在Interface Builder中連接到fooBarController等。這會讓你直接引用它們,而不是從數組中抓取它們。

0

最直接的意思我能想到依賴於事實,你第一次啓動應用程序時,除非你正在做的事情,以節省重新排序,你可以節省掉UIViewControllers的初始列表:

initialOrdering = [[appDel.tabBar viewControllers] copy]; 

其中'initialOrdering'是一個NSArray *,然後在您發佈的代碼中使用它代替appDel.tabBar.viewControllers。

相關問題