假設我在我的iPhone應用程序的一個選項卡視圖中有一個UIButton
,我想讓它在TabBarController
的選項卡欄中打開不同的選項卡。我會如何編寫代碼來做到這一點?以編程方式切換到TabBar選項卡視圖?
我假設我卸載現有的視圖並加載特定的選項卡視圖,但我不知道如何精確地編寫代碼。
假設我在我的iPhone應用程序的一個選項卡視圖中有一個UIButton
,我想讓它在TabBarController
的選項卡欄中打開不同的選項卡。我會如何編寫代碼來做到這一點?以編程方式切換到TabBar選項卡視圖?
我假設我卸載現有的視圖並加載特定的選項卡視圖,但我不知道如何精確地編寫代碼。
試試這個:
self.tabBarController.selectedIndex = 1;
或
[self.tabBarController setSelectedIndex:1];
完美,謝謝。儘管每個人都給出了正確的答案,所有人都贊同! – rottendevice 2011-03-24 16:39:09
請注意,如果索引映射到「更多」視圖控制器中的一個選項卡(如果您的選項卡多於五個),這將不起作用。在這種情況下,使用'-setSelectedViewController:'。 – 2012-03-02 15:43:43
我這樣做後,它成功地更改了標籤,我不能再正常選擇標籤欄。更新:這是在我以編程方式交換選項卡之前調用popToRootViewController的某種方式。 – 2014-05-13 03:35:41
您可以簡單地將UITabBarController上的selectedIndex
屬性設置爲適當的索引,並且該視圖將像用戶點擊選項卡按鈕一樣更改。
由於一個小的區別是可以通知用戶切換選項卡的委託方法未被調用。 – 2011-05-13 17:58:22
設置'selectedIndex'對我來說也不適用於索引> 4,但'selectedViewController'。 – bugloaf 2012-08-14 16:33:58
注意標籤被索引從0開始所以下面的代碼片段工作
tabBarController = [[UITabBarController alloc] init];
.
.
.
tabBarController.selectedViewController = [tabBarController.viewControllers objectAtIndex:4];
進入到第五個標籤在酒吧。
thnx男人,你救我的4至5小時... – Ayaz 2013-08-16 06:50:21
我的意見是selectedIndex
或使用objectAtIndex
不一定是切換選項卡的最佳方式。如果您重新排列標籤,硬編碼索引選擇可能會混淆以前的應用程序行爲。
如果您想要切換到視圖控制器的對象引用,你可以這樣做:
tabBarController.selectedViewController = myViewController
當然,你必須確保,即myViewController
真的是在tabBarController.viewControllers
列表。
對於您可能要移動標籤的情況,下面是一些代碼。
for (UINavigationController *controller in self.tabBarController.viewControllers) {
if ([[controller.childViewControllers objectAtIndex:0] isKindOfClass:[MyViewController class]]) {
[self.tabBarController setSelectedViewController:controller];
break;
}
}
我試過迪斯科S2的建議,它很接近,但這是結束了爲我工作。這是在完成另一個選項卡中的操作後調用的。
for (UINavigationController *controller in self.tabBarController.viewControllers)
{
if ([controller isKindOfClass:[MyViewController class]])
{
[self.tabBarController setSelectedViewController:controller];
break;
}
}
我希望能夠以指定標籤是由類,而不是指數顯示,因爲我認爲這對於一個強大的解決方案,這是較少依賴於你如何線了IB製成。我沒有找到任何迪斯科的或Joped的解決方案的工作,所以我創造了這個方法:
-(void)setTab:(Class)class{
int i = 0;
for (UINavigationController *controller in self.tabBarContontroller.viewControllers){
if ([controller isKindOfClass:class]){
break;
}
i++;
}
self.tabBarContontroller.selectedIndex = i;
}
你這樣稱呼它:
[self setTab:[YourClass class]];
希望這是有益的人
使用中AppDelegate.m
file:
(void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
{
NSLog(@"Selected index: %d", tabBarController.selectedIndex);
if (viewController == tabBarController.moreNavigationController)
{
tabBarController.moreNavigationController.delegate = self;
}
NSUInteger selectedIndex = tabBarController.selectedIndex;
switch (selectedIndex) {
case 0:
NSLog(@"click me %u",self.tabBarController.selectedIndex);
break;
case 1:
NSLog(@"click me again!! %u",self.tabBarController.selectedIndex);
break;
default:
break;
}
}
我有上面的方法的問題,在我的[問題] [1] [1]:http:// stackoverflow。com/questions/19742416/tabbarcontroller-unload-itself-after-call-modalview – 2013-11-02 18:54:27