以编程方式在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]
或者......
[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 ...
}
对我来说,通过调用Tabbarcontroller方法来设置似乎是正确的!但会检查它并不重要! – prakash 2009-11-25 08:34:16
是的,也许你是对的 - 我拿了我的代码的一部分,我用TabBar没有tabbarcontroller – Vladimir 2009-11-25 08:37:13
这是非常感谢。好吧,愚蠢的问题第2部分。我如何从我的代码到根对象?实际的TabBar是从根视图控制器的代码中设置的。我想能够设置TabBar的属性,但是从另一个视图控制器被推送到堆栈。我解释得很好吗?这就像我需要一个等同的自我,但对于树顶部的父对象。 再次为newbe问题感到抱歉,我错过了我猜想中相当基本的东西。 – 2009-11-25 18:19:49