使用 BannerViewController 时没有 UITabBarItem 图像

Posted

技术标签:

【中文标题】使用 BannerViewController 时没有 UITabBarItem 图像【英文标题】:No UITabBarItem image when using BannerViewController 【发布时间】:2013-02-27 12:11:47 【问题描述】:

我有一个针对 ios 6 的通用选项卡式应用程序,带有 4 个选项卡。几乎准备好发布了,我开始寻找支持 iAds 的最新和最好的方法。在查看了 Apple 的 iAdSuite 演示项目后,似乎使用 BannerViewController 来包装我的 4 个 UIViewController 是完美的解决方案。

而且它在正确显示 iAd 方面表现出色。

但是,自从进行更改后,我的标签栏不再显示图像/图标。我逐行浏览了 BannerViewController 代码,但看不到任何似乎覆盖图像设置的内容。

我所做的更改是:

    将 BannerViewController.h & .m 添加到我的项目中。 #import 在我的 4 个 UIViewController 中的每一个中。 修改设置我的标签视图控制器的 AppDelegate 代码,使其发生变化:

来自

self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.delegate = self;
self.tabBarController.viewControllers = @[viewController1, viewController2, viewController3, viewController4];

self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.delegate = self;
self.tabBarController.viewControllers = @[
                [[BannerViewController alloc] initWithContentViewController:viewController1],
                [[BannerViewController alloc] initWithContentViewController:viewController2],
                [[BannerViewController alloc] initWithContentViewController:viewController3],
                [[BannerViewController alloc] initWithContentViewController:viewController4]
                 ];

在我的 4 个视图控制器中,我在 initWithNibName 方法中有以下代码(带有适当的标题和图像名称:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        self.title = NSLocalizedString(@"Library", @"Library");
        self.tabBarItem.image = [UIImage imageNamed:@"96-book"];
    
    return self;

使用原始代码,标题和图像按预期工作。使用修改后的代码,我得到标题但没有图像,只有一个黑色按钮。有没有人遇到过这种情况?

请注意,我在 Apple 示例应用程序中尝试过此操作,但也无法在其中显示图像,示例应用程序针对 iOS5,而我的应用程序针对 iOS6。

【问题讨论】:

【参考方案1】:

所以我终于找到了一个解决方案,这要感谢这个有点相关的 SO question ...

iOS Change frame of UITabBarButton in UITabBar

我从视图控制器中删除了图像设置代码,而是在将视图控制器分配给 UITabBar 之后将以下几行添加到 AppDelegate

UITabBar *tabBar = self.tabBarController.tabBar;
[[tabBar.items objectAtIndex:0] setImage:[UIImage imageNamed:@"253-person"]];
[[tabBar.items objectAtIndex:1] setImage:[UIImage imageNamed:@"138-scales"]];
[[tabBar.items objectAtIndex:2] setImage:[UIImage imageNamed:@"85-trophy"]];
[[tabBar.items objectAtIndex:3] setImage:[UIImage imageNamed:@"96-book"]];

现在我的标签栏图像又回来了!

【讨论】:

【参考方案2】:

我刚刚遇到了同样的问题。 原因是封装了各个ViewController的BannerViewController没有通过访问tabBarItem,所以UITabBarController找不到自己需要的图标。

正确的解决方法是将其添加到 BannerViewController.m:

- (UITabBarItem *)tabBarItem 
  return _contentController.tabBarItem; 

【讨论】:

以上是关于使用 BannerViewController 时没有 UITabBarItem 图像的主要内容,如果未能解决你的问题,请参考以下文章

参数标志,不使用时为空,不使用时为默认值

使用 php artisan migrate 时,迁移时更改表名,使用 tinker 保存对象时出错

使用前台服务时允许“使用应用程序时”而不是“始终允许”是不是可以?

为啥在使用自适应查询执行时要使用广播时火花洗牌

使用自定义效果时缺少网格颜色,但使用 BasicEffect 时没有

使用google可视化api时,使用dashboard时如何使用getChartLayoutInterface()