4

我有一个UITabBarController包含 4 个不同的UIViewControllers.

在第一个选项卡上有一个UINavigationViewController包含它的子项UIViewController。在不点击标签栏的情况下,我想将用户带到第二个标签上。为此,我尝试了:

self.navigationController.tabBarController.selectedIndex = 1;

但它不起作用。

忽略任何错误我是新手。

谢谢你。

4

7 回答 7

10

如果设置委托试试这个:

self.selectedIndex = 1;

你是 tabBarController :)

于 2016-12-10T17:18:49.037 回答
6

在尝试更改选项卡之前执行以下操作:

UITabBarController *tab = self.tabBarController;

if (tab) {
   NSLog(@"I have a tab bar");
   [self.tabBarController setSelectedIndex: 1];
}
else {
   NSLog(@"I don't have one");
}
于 2012-05-09T20:31:31.550 回答
2

为了调用tabbarcontroller.selectedindex你必须从导航控制器中找出 tabbarcontroller 如果你不使用 navigationController 上的 push 只需使用 navigationController 的 topViewController 属性来获取你的 tabBarController 的实例并将它分配给 UITabBarController 和我们 selectedIndex 这将工作正常

于 2012-05-10T11:53:44.910 回答
2

尝试将您的选项卡切换代码移动到viewDidLoad

我验证这适用于 xcode 4 中内置的选项卡式应用程序模板项目

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tabBarController.selectedIndex = 1;
}

我还会看一下您的 AppDelegate 类,以了解与此类似的内容

self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
self.window.rootViewController = self.tabBarController;

如果您在任何地方都看不到这些行,那么您需要在代码中的其他位置找到 UITabBarViewController 正在初始化的位置,并改用该对象指针。

于 2012-05-10T11:11:29.970 回答
1

试试看嘛

self.tabBarController.selectedIndex = 1
于 2012-05-09T20:26:47.997 回答
0

我们应该把下面的部分放在 viewDidAppear 中。

    - (void)viewDidAppear:(BOOL)animated
{
NSArray *ary = [self.tabBarController viewControllers];
    UIViewController *vc = ary[3];
    [self.tabBarController setSelectedIndex:3];
    [self.tabBarController setSelectedViewController:vc];
}
于 2014-08-18T09:20:59.840 回答
0

如果您正在呈现一个新控制器(不同于当前屏幕上的控制器),您应该在函数的完成块中设置索引以呈现您的视图控制器。如果您在呈现之前设置它,它可能无法正常工作。

就我而言,我已将选项卡控制器嵌入到导航控制器中。我展示了新的导航控制器newNavContoller,一旦它出现,我在我的标签控制器中设置索引tvc

currentViewController?.presentViewController(newNavController, animated: true, completion: {tvc.selectedIndex = selectedIndex})
于 2016-01-24T04:55:28.863 回答