我在xcode中创建了一个基本项目作为“标签栏应用程序”,如果BOOL x为真,我希望将应用程序加载到第二个标签。
现在我有:(位于viewDidLoad中的FirstViewController.m)
if(x){
[self.tabBarController setSelectedIndex:1];
}
这会导致页面底部的选定选项卡突出显示第二个选项卡,但视图仍然是第一个选项卡的视图。
我如何将视图更改为第二个标签的视图?
答案 0 :(得分:48)
好吧,我重现了你的问题,并通过将切换逻辑从-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。暂停直到你的视图实际出现,确保一切都被加载并保持一致状态。
答案 1 :(得分:9)
假设您正在使用作为UITabBarController的子类的控制器,您只需要设置selectedIndex属性。
例如:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.selectedIndex = 1;
}
我更喜欢在viewDidLoad方法中执行此分配,因此可以保证只显示所选索引处的视图控制器。如果使用viewDidAppear函数,当标签栏视图加载到索引1的那个之前,您将看到索引0处的视图控制器短暂显示。
答案 2 :(得分:4)
这就足够了:
[tabBar setSelectedIndex:0];
答案 3 :(得分:3)
[self.tabBarController setSelectedIndex:1]
[window addSubview:[tabBarController view]];
[window makeKeyAndVisible];
答案 4 :(得分:2)
适用于Swift 3.0
if(x)
{
self.tabBarController?.selectedIndex = 1
}