以编程方式更改tabBarController的选定选项卡

时间:2011-01-20 16:48:20

标签: iphone objective-c

我在xcode中创建了一个基本项目作为“标签栏应用程序”,如果BOOL x为真,我希望将应用程序加载到第二个标签。

现在我有:(位于viewDidLoad中的FirstViewController.m)

if(x){
    [self.tabBarController setSelectedIndex:1];
}

这会导致页面底部的选定选项卡突出显示第二个选项卡,但视图仍然是第一个选项卡的视图。

我如何将视图更改为第二个标签的视图?

5 个答案:

答案 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
}