UITableView中的UITabBar MoreViewController图像在以编程方式选择后消失

Posted

技术标签:

【中文标题】UITableView中的UITabBar MoreViewController图像在以编程方式选择后消失【英文标题】:UITabBar MoreViewController image in UITableView disappears after programmatically selecting it 【发布时间】:2012-10-07 10:26:51 【问题描述】:

我正在尝试在 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的列表视图时,左侧的图标消失了,不会再回来了。

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

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

任何建议我做错了什么?

最好的问候, 史蒂夫

【问题讨论】:

不应该是objectAtIndex:4吗? 哪张图片不见了?我很难理解你的问题。 【参考方案1】:

选择更多导航控制器

要选择moreNavigationController,必须设置selectedViewController:

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

原因很简单:moreNavigationController不在标签栏控制器的viewControllers里面,所以无法通过索引选择。

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

self.tabBarController.selectedViewController = viewController5;

或者你可以设置selectedIndex:

self.tabBarController.selectedIndex = 5;

修复消失的标签栏图像

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

    不要为更多部分添加导航控制器,而是直接添加控制器。控制器结构如下所示,假设所有选项卡中的控制器都需要导航:

    tabBarController
    + navigationController
      + viewController0
    + navigationController
      + viewController1
    + navigationController
      + viewController2
    + navigationController
      + viewController3
    + viewController4
    + viewController5
    

    在其导航控制器上设置设置控制器的tabBarItem(您只需执行一次):

    UINavigationController *settingsNavigationController = [appDelegate.objTabBarController objectAtIndex:5];
    UIViewController *settingsRootController = settingsNavigationController.viewControllers[0];
    settingsNavigationController.tabBarItem = settingsRootController.tabBarItem;
    

【讨论】:

非常感谢。我遇到了类似的问题,在我的一个选项卡上按下后退按钮返回 moreNavigationController 后,该选项卡的图像将暂时为空白。我花了一个星期断断续续地试图弄清楚,这个简单的更改(您发布的第一个解决方案)终于解决了它。 @Sam 很高兴听到这仍然有效。解决方法可以追溯到 ios 被命名为 iPhone OS 的时候……【参考方案2】:

我遇到了同样的问题。似乎导航控制器不知何故失去了对视图控制器的跟踪。在我的例子中,图像消失的导航控制器位于 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];

【讨论】:

【参考方案3】:

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

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

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

所以,我做了以下事情

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

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

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

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

【讨论】:

以上是关于UITableView中的UITabBar MoreViewController图像在以编程方式选择后消失的主要内容,如果未能解决你的问题,请参考以下文章

包含 UITableView 和 UITabBar 的视图

使用 UITableView 填充 UITabBar

UITabBar 将隐藏 UITableView 的最后一个单元格

UITabBar 覆盖的 UITableView 页脚视图

带有 UITableView 的 UITabBar - 我可以正确看到表格,但无法选择一行

当我的应用程序通过我的 UITabBar 完成启动时,如何将加载的数据传递给 UITableView?