通过编程方式选择选项卡栏项目(而不是使用UITabBarController)

27

我有一个派生自UIViewController(而不是UITabBarController)的视图。在这个视图中,我添加了一个带有几个选项卡的标签栏。我使用UITabBarDelegate来允许视图在用户点击每个选项卡时执行某些操作。

class MyViewController: UIViewController, UITabBarDelegate {

    func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem!) {
        // do something
    }
}
我的问题是如何在视图首次加载时以编程方式选择第一个选项卡项目?请注意,我希望第一个选项卡项目也处于“活动”状态。

再次说明,我不使用UITabBarController。

谢谢。
6个回答

48
[tabBar setSelectedItem: [tabBar.items objectAtIndex:0]];

我认为,在Swift中应该这样写:

tabBar.selectedItem = tabBar.items![0] as UITabBarItem

2
谢谢Foster。我实际上需要编写这段代码: tabBar.selectedItem = tabBar.items![0] as UITabBarItem但是,我想模拟第一个选项卡的“点击”事件。这可能吗? - tala9999
我不确定你的意思。你是说当你执行 tabBar.selectedItem = tabBar.items![0] as UITabBarItem 时,代理方法 tabBar(_:didSelectItem:) 没有被调用? - Foster Bass
2
是的,那就是我的意思。那段代码只是将选项卡设置为“活动状态”,并没有触发 tabBar(_:didSelectItem:) - tala9999
4
直接修改由选项卡栏控制器管理的选项卡栏是不被允许的。代码会抛出异常!以下方法可行:self.tabBarController?.tabBar.selectedItem = 2 - Chanchal Raj
1
@Foster Bass:调用 tabBar(_:didSelectItem:) 方法违反了其目的,因为该方法必须由其委托定义自动触发。 - XLE_22
显示剩余3条评论

20

Swift 3:

tabBarController.selectedIndex = 0 // (or any other existing index)

6
在Swift中,如果使用的是tabbar而不是tabbarcontroller,请设置默认选项。
var tabbar:UITabBar?//if declare like this

tabbar!.selectedItem = self.tabbar!.items![0] as? UITabBarItem

或者

let tabbar = UITabBar()//if declare and initilize like this

tabbar.selectedItem = self.tabbar.items![0] as? UITabBarItem

as? UITabBarItem 是多余的,至少对于较新版本的Swift而言是这样的,你会收到警告:_从 'UITabBarItem' 到 'UITabBarItem' 的条件转换总是成功的_。 - torof

5

如果您在UITabBarController内部,可以使用self.selectedIndex = //设置目标索引


0

在viewDidLoad事件之前选择活动选项卡栏项目

[self.tabBar setSelectedItem: [self.tabBar.items objectAtIndex:0]];


-1
在Xamarin.ios中,我们可以这样使用: mainTabBarController.selectedIndex=3;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接