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 隐藏导航栏,将其永久隐藏