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图像在以编程方式选择后消失的主要内容,如果未能解决你的问题,请参考以下文章
UITabBar 将隐藏 UITableView 的最后一个单元格