7

我正在尝试在 UITabBar.viewControllers 数组中选择我的 UINavigationControllers 之一。

我之前尝试过设置 UITabbarController.selectedIndex,但 Apple 文档说: “要选择更多导航控制器本身,您必须改为更改 selectedViewController 属性的值。”

AppDelegate *appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
UINavigationController *navController = [appDelegate.objTabBarController.viewControllers objectAtIndex:5];
[appDelegate.objTabBarController setSelectedViewController:navController];

这样做很好,但是当我改回 MoreViewController 的列表视图时,左侧的图标消失了,不会回来了。

一切正常,用手指选择它时。

选择就好

以编程方式选择时出现错误->图像消失了

每个代码步骤 1 每个代码步骤 2 每个代码步骤 3

有什么建议我做错了吗?

最好的问候,史蒂夫

4

3 回答 3

1

选择更多导航控制器

要选择 moreNavigationController,您必须设置selectedViewController

self.tabBarController.selectedViewController = self.tabBarController.moreNavigationController;

原因很简单:moreNavigationController 不在viewControllerstab bar controller 的内部,所以不能通过 index 选择。

要直接选择“更多”控制器之一,您可以设置selectedViewController属性:

self.tabBarController.selectedViewController = viewController5;

或者您可以设置selectedIndex

self.tabBarController.selectedIndex = 5;

修复消失的标签栏图像

moreNavigationController消失的标签栏图像是由在导航控制器(由标签栏控制器生成)内使用导航控制器(用于设置)引起的。要修复它,有两种解决方案:

  1. 不要为更多部分添加导航控制器,而是直接添加控制器。控制器结构看起来像这样,假设所有选项卡中的控制器都需要导航:

    tabBarController
    + navigationController
      + viewController0
    + navigationController
      + viewController1
    + navigationController
      + viewController2
    + navigationController
      + viewController3
    + viewController4
    + viewController5
    
  2. 在其导航控制器上设置tabBarItem设置控制器的 (您只需执行一次):

    UINavigationController *settingsNavigationController = [appDelegate.objTabBarController objectAtIndex:5];
    UIViewController *settingsRootController = settingsNavigationController.viewControllers[0];
    settingsNavigationController.tabBarItem = settingsRootController.tabBarItem;
    
于 2013-04-24T07:11:09.130 回答
0

我遇到了同样的问题。似乎导航控制器不知何故失去了对视图控制器的跟踪。在我的例子中,图像消失的导航控制器位于 tabBarController 中的索引 7。导航控制器应该包含类 SettingsViewController 的 viewController。但有时它会失去它。

为了解决这个问题,我不得不将代码添加到两个类——应用程序委托和 SettingsViewController。在应用委托中:

-(void) fixSettingsNavigationController {
    UITabBarController* tab = self.tabBarController;
    NSArray* vcs = tab.viewControllers;
    NSInteger nVCs = vcs.count;
    if (nVCs > 7) {
        UIViewController* settingsContainer = vcs[7];
        UINavigationController* settingsContainerNav = (UINavigationController*)settingsContainer;
        if ([settingsContainerNav isKindOfClass: [UINavigationController class]]) {
            NSArray* settingsNavVCs = settingsContainerNav.viewControllers;
            NSInteger count = settingsNavVCs.count;
            SettingsViewController* svc = self.settingsViewController;
            if (!count) {
                  //  The container navigation controller has lost track of the settings view controller.
                  settingsContainerNav.viewControllers = [NSArray arrayWithObject:svc];
            }
        }
    }
}

在 SettingsViewController 中:

-(void) viewWillDisappear:(BOOL)animated {
    MyAppDelegate* appDel = [[UIApplication sharedApplication] delegate];
    [appDel fixSettingsNavigationController];
    [super viewWillDisappear: animated];
}
于 2013-01-13T17:18:21.787 回答
0

我遇到了非常相似的情况,我想以编程方式在 MoreViewController 中选择一个视图控制器。

正如您在问题中所说,苹果不允许选择 MoreViewController 内部的视图控制器(或在标签栏中不可见)。

就我而言,我不需要在标签栏中重新排序标签的默认“更多”功能。

所以,我做了以下事情

  1. 创建了一个 UITableViewControlelr 作为我的第 5 个选项卡,将其标题设置为更多和自定义图像(类似于默认更多图像)。

  2. 在我的 UITableViewController 中,我列出了与 ViewControllers 对应的项目。点击哪个显示相应的视图控制器。

  3. 当我需要以编程方式显示我的 UITableViewController 中的任何视图控制器时,我只需设置一个标志并推送我的 UITableViewController,然后在我的 UITableViewController 的 viewDidAppear 方法中推送所需的视图控制器。

  4. 这还将在以编程方式打开的视图上显示返回按钮到 MoreViewController 列表

于 2013-04-25T05:19:12.113 回答