我有一个以编程方式创建的UITabBarController,它有6个标签。因此,自动创建MoreNavigationController以处理超过5个选项卡。当显示MoreNavigationController时,一切看起来都很好,但是当我选择其中一行来将视图控制器推到堆栈时,单元格图像(标签栏图像)消失。当我弹出该视图控制器时,图像保持隐藏状态,直到弹出动画完成,此时图像突然再次出现。
这是相当陈旧的代码,这些天我不会这样做,但是除了最后这个小东西之外,一切都有效,所以我非常犹豫地撕掉所有代码并以另一种方式做到这一点。任何人都可以提出我可能做错的建议吗?
创建其中一个标签栏视图控制器的示例:
InfoViewController* infoViewController = [[InfoViewController alloc] init];
infoViewController.tabBarItem.image = [UIImage imageNamed:@"90-life-buoy.png"];
infoViewController.tabBarItem.title = @"More Info";
infoViewController.title = @"More Info";
UINavigationController* infoNavController = [[UINavigationController alloc] initWithRootViewController:infoViewController];
[infoViewController release];
创建标签栏:
tabBarController = [[UITabBarController alloc] init];
tabBarController.viewControllers = [NSArray arrayWithObjects:outdoorsNavController, peopleNavController, citiesNavController, landscapesNavController, infoNavController, basicsNavController, nil];
[window addSubview:tabBarController.view];
编辑:我是否使用视网膜(@ 2x)图像似乎没有任何区别。
答案 0 :(得分:4)
问题是因为您将InfoViewController
包裹在UINavigationController
中。
当您点击MoreNavigationController
中的表格行时,控制器会在tabBarItem
进行转换时使用UINavigationController
。因为这是nil(在您的代码中),MoreNavigationController
中的图像会消失。转换最终完成后,MoreNavigationController
选择tabBarItem
中的InfoViewController
试试这个:
InfoViewController* infoViewController = [[InfoViewController alloc] init];
infoViewController.tabBarItem.image = [UIImage imageNamed:@"90-life-buoy.png"];
infoViewController.tabBarItem.title = @"More Info";
infoViewController.title = @"More Info";
UINavigationController* infoNavController = [[UINavigationController alloc] initWithRootViewController:infoViewController];
//Set the tabBarItem for UINavigationController
infoNavController.tabBarItem = infoViewController.tabBarItem
[infoViewController release];
这是一个复制和解决问题的视频:
第7项有一个空tabBarItem.image
,而第6项有tabBarItem.image
设置
答案 1 :(得分:0)
我不确定,但您是否尝试过设置NavigationCotroller's
.tabBarItem
?
答案 2 :(得分:0)
不确定我是否理解正确,但最重要的是这里有一些建议(更多标签栏项目不应该一直消失,这是自动创建的)
您是否尝试将用于更多控件的UINavigationController
子类化并在其中设置其标签栏项属性,从而确保您可以控制其生命周期?
将您希望推送到导航堆栈的UIViewController
子类化并让他们使用相同的标签栏项目?
模仿默认功能,创建自己的UITableViewController
以充当更多控制器,并在每次点击行时,按照自定义方式执行您想要的操作。
PS:尝试设置不带.png扩展名的图片名称。这样您也将自动加载@ 2x资源。例如:[UIImage imageNamed:@“90-life-buoy”]