self.navigationController.tabBarController.selectedIndex 不起作用

Posted

技术标签:

【中文标题】self.navigationController.tabBarController.selectedIndex 不起作用【英文标题】:self.navigationController.tabBarController.selectedIndex not working 【发布时间】:2012-05-18 09:47:32 【问题描述】:

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

self.navigationController.tabBarController.selectedIndex = 1;

但它不起作用。

忽略任何错误我是新手。

谢谢。

【问题讨论】:

【参考方案1】:

在尝试更改标签之前,请执行以下操作:

UITabBarController *tab = self.tabBarController;

if (tab) 
   NSLog(@"I have a tab bar");
   [self.tabBarController setSelectedIndex: 1];

else 
   NSLog(@"I don't have one");

【讨论】:

是的,我想通了...尝试以下操作,将“self.tabBarController”替换为“self.navigationBar.tabBarController”,看看 if 会发生什么... UITabBarController *tab=self.navigationController.tabBarController;是说我没有...但是为什么我没有得到它 好吧@SweetJenny,没有更多细节,我很难弄清楚。如果您需要更多帮助,请给我发送电子邮件。 抱歉,我的电子邮件 sauron[dot]is[dot]alive[at]gmail[dot]com。你可以联系我.. 看我的回答,如果你有什么不懂的给我回复,我会帮你的【参考方案2】:

如果设置委托 试试这个:

self.selectedIndex = 1;

你是 tabBarController :)

【讨论】:

【参考方案3】:

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

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

currentViewController?.presentViewController(newNavController, animated: true, completion: tvc.selectedIndex = selectedIndex)

【讨论】:

【参考方案4】:

我们应该把后续部分放在 viewDidAppear 中。

    - (void)viewDidAppear:(BOOL)animated

NSArray *ary = [self.tabBarController viewControllers];
    UIViewController *vc = ary[3];
    [self.tabBarController setSelectedIndex:3];
    [self.tabBarController setSelectedViewController:vc];

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

尝试将标签切换代码移至 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 并改用该对象指针。

【讨论】:

【参考方案7】:

试试吧

self.tabBarController.selectedIndex = 1

【讨论】:

从情节提要创建 tabBarController 时,此解决方案不起作用。

以上是关于self.navigationController.tabBarController.selectedIndex 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

self.navigationController.tabBarController.selectedIndex 不起作用

self.navigationController 在 swift 中为零

self.navigationController 分配为 RootViewController 后为空?

iOS 开发:为啥 self.navigationController.navigationBar.frame.size.height 返回零?

Objective-C:使用 self.navigationController 和自定义 UINavigationController

使用 self.navigationController.hidesBarsOnSwipe = true 隐藏导航栏,将其永久隐藏