以编程方式在Xcode中按下UITabBar按钮

问题描述:

对不起,新手问题。我在我的主窗口视图中有一个UITabBar,并且每个Tab都有一个UINavigationControllers数组。该结构类似于iPod应用程序,因为可以通过选择TabBar项目来查看主视图,然后用户可以通过将视图推送到堆栈,使用NavigationController进一步深入查看。以编程方式在Xcode中按下UITabBar按钮

我想要做的就是做相当于从代码中的任何子视图底部按TabBar按钮(即,更改TabBar的选定属性,并显示启动第一个视图控制器为标签)。

任何帮助将不胜感激。

戴夫

[myTabBarController setSelectedIndex:index] 

编辑:从评论回答了部分问题2:

您可以定义AppDelegate中的方法用于切换到不同的选项卡。

而且你可以从任何地方获得的appdelegate的保持和发送的短信.. 类似:

MyAppDelegate *appDelegate = (MyAppDelegate*) [[UIApplication sharedApplication] delegate]; 
[appDelegate SwitchToTab:index] 
+0

对我来说,通过调用Tabbarcontroller方法来设置似乎是正确的!但会检查它并不重要! – prakash 2009-11-25 08:34:16

+0

是的,也许你是对的 - 我拿了我的代码的一部分,我用TabBar没有tabbarcontroller – Vladimir 2009-11-25 08:37:13

+0

这是非常感谢。好吧,愚蠢的问题第2部分。我如何从我的代码到根对象?实际的TabBar是从根视图控制器的代码中设置的。我想能够设置TabBar的属性,但是从另一个视图控制器被推送到堆栈。我解释得很好吗?这就像我需要一个等同的自我,但对于树顶部的父对象。 再次为newbe问题感到抱歉,我错过了我猜想中相当基本的东西。 – 2009-11-25 18:19:49

或者......

[self.parentViewController.tabBarController setSelectedIndex:3]; 

我想回复普拉卡什,但无法弄清楚如何。也许我被阻挡直到我的分数上升。

无论如何,我希望这可以帮助别人:

我在做什么普拉卡什说了,什么也没有发生。这是因为,以获得一个指向我的应用程序委托,我这样做:

AppDelegate_Phone *appDelegate = [[AppDelegate_Phone alloc] init]; 

当我本来应该这样做:

AppDelegate_Phone *appDelegate = (AppDelegate_Phone *) [[UIApplication sharedApplication] delegate]; 

新手的错误。

对于这一点,你只需要采取UITabBar控制器 -

.H文件 -

UITabBarController *_pTabBarController; 
@property (nonatomic, retain) IBOutlet UITabBarController *_pTabBarController; 

.m File - 
// synthesize it 
@synthesize _pTabBarController;  

At initial load 

// You can write one function to add tabBar - 

// As you have already mentioned you have created an array , if not 

_pTabBarController = [[UITabBarController alloc] init]; 
    NSMutableArray *localViewControllersArray = [[NSMutableArray alloc] initWithCapacity:4]; 
    UINavigationController *theNavigationController; 

    _pController = [[Controller alloc] initStart]; 
    _pController.tabBarItem.tag = 1; 
    _pController.title = @"Baranches"; 
    theNavigationController = [[UINavigationController alloc] initWithRootViewController:_pController]; 
    theNavigationController.tabBarItem.tag = 1; 
    theNavigationController.tabBarItem.image = [UIImage imageNamed:@"icon_branches.png"]; 
    [localViewControllersArray addObject:theNavigationController]; 
    [theNavigationController release]; 

比可以设定指标,按您的需求

self._pTabBarController.selectedIndex = 0; // as per your requirements 

[self.parentViewController.tabBarController setSelectedIndex:3]; 

选择对我来说这个指数,但它只是强调了navbarcontroller的指数作为活跃指数,但它突出了我ndex它实际上是在tabbarmenu项目建议的不同视图控制器上。

只是想补充一点,我使用了这个从我的视图控制器,它执行像某人实际上按下menuitem;从代码:

UITabBarController *MyTabController = (UITabBarController *)((AppDelegate*) [[UIApplication sharedApplication] delegate]).window.rootViewController; 
[MyTabController setSelectedIndex:1]; 

谢谢你的这篇文章/答案它帮助了我的项目很多。

我想做类似的事情,但对于XCode 6.4 iOS(8.4)setSelectedIndex本身不会这样做。

标签栏的视图控制器添加到列表,然后使用类似的一些功能下面,然后调用它:

FirstViewController *firstVC = [[self viewControllers] objectAtIndex:0]; 
[self.selectedViewController.view removeFromSuperview] 
[self.view insertSubview:firstVC.view belowSubview:self.tabBar]; 
[self.tabBar setSelectedItem:self.firstTabBarItem]; 
self.selectedViewController = firstVC; 

你可能有类似的代码已经在您的didSelectedItem内..

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { 

    if (item == self.firstTabBarItem) 
     // Right here 
    } 
    else if ... 
}