我有一个在xcode中创建为“标签栏应用程序”的基本项目,我想要的是有负载的应用程序切换到第二个标签,如果BOOL x是真的。
现在我有:(位于viewDidLoad中的FirstViewController.m )
if(x){
[self.tabBarController setSelectedIndex:1];
}
这会导致页面底部的选定选项卡突出显示第二个选项卡,但视图仍保持第一个选项卡的视图。
如何将视图更改为第二个选项卡的视图?
发布于 2011-01-20 19:30:14
好了,我重现了您的问题,并通过将切换逻辑从-viewDidLoad移动到-viewDidAppear:来解决它。所以基本上,改变:
- (void)viewDidLoad {
// Other code...
if(x){
[self.tabBarController setSelectedIndex:1];
}
}
至:
- (void)viewDidAppear:(BOOL)animated {
// Other code...
if(x){
[self.tabBarController setSelectedIndex:1];
}
}
现在,至于为什么会这样,我只能猜测,没有更多的挖掘,它与事物被初始化的顺序有关。您的视图控制器的viewDidLoad可能在父选项卡栏控制器完成自己的初始化之前被调用。等到视图实际出现时,可以确保所有内容都已加载并处于一致的状态。
发布于 2014-09-08 03:18:28
假设您使用的控制器是UITabBarController的子类,则只需设置selectedIndex属性。
例如:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.selectedIndex = 1;
}
我更喜欢在viewDidLoad方法中完成这个赋值,这样就可以保证只显示所选索引处的视图控制器。如果使用viewDidAppear函数,有时会看到索引0处的视图控制器在索引1处的选项卡栏视图加载之前短暂显示。
发布于 2012-06-26 06:39:08
这就足够了:
[tabBar setSelectedIndex:0];
https://stackoverflow.com/questions/4750002
复制