【问题标题】:Why does this UITabBarItem image switching code work on iOS 7 but not iOS 7.1?为什么这个 UITabBarItem 图像切换代码在 iOS 7 上有效,而在 iOS 7.1 上无效?
【发布时间】:2014-03-11 14:19:58
【问题描述】:

这是在我的 AppDelegate.m 文件中。这段代码在 iOS 7 上完美运行。UITabBarItem 将被选中,选中的那一张的图像更改为“按下”图像,而其他图像会变回来。

现在代码在 iOS 7.1 中根本无法使用。奇怪的。有人知道为什么吗?

7.0(注意设置图片已正确更改为填充白色):

7.1(注意设置中没有白色填充):

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    if (IS_IOS7_AND_UP)
    {
        NSLog(@"%d", (int)tabBarController.selectedIndex);

        UITabBarItem *tbi = (UITabBarItem *)(tabBarController.tabBar.items)[tabBarController.selectedIndex];
        UITabBarItem *tb2 = (UITabBarItem *)(tabBarController.tabBar.items)[2];
        UITabBarItem *tb3 = (UITabBarItem *)(tabBarController.tabBar.items)[3];
        UITabBarItem *tb4;

        if ([tabBarController.tabBar.items count] > 4)
            tb4 = (UITabBarItem *)(tabBarController.tabBar.items)[4];


        switch (tabBarController.selectedIndex) {
                case 0:

                    tb2.image = [UIImage imageNamed:@"settings-icon-ios7"];
                    tb3.image = [UIImage imageNamed:@"help-icon-ios7"];
                    break;

                case 1:

                    tb2.image = [UIImage imageNamed:@"settings-icon-ios7"];
                    tb3.image = [UIImage imageNamed:@"help-icon-ios7"];
                    break;

                case 2:

                    tbi.image = [UIImage imageNamed:@"settings-icon-ios7-pressed"];
                    tb3.image = [UIImage imageNamed:@"help-icon-ios7"];
                    break;

                case 3:

                    tbi.image = [UIImage imageNamed:@"help-icon-ios7-pressed"];
                    tb2.image = [UIImage imageNamed:@"settings-icon-ios7"];
                    break;

                case 4:

                    tb2.image = [UIImage imageNamed:@"settings-icon-ios7"];
                    tb3.image = [UIImage imageNamed:@"help-icon-ios7"];
                    break;

                default:
                    break;
            }
      }
}

【问题讨论】:

  • 你的 IS_IOS7_AND_UP 宏是如何定义的?
  • 为什么不直接使用UITabBarItem的selectedImage属性呢?
  • @bjtitus - 实际上不知道该属性...我会调查它。
  • @Flexicoder - 它进入 if 语句就好了。 #define IS_IOS7_AND_UP ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0)
  • @bjtitus 是对的,原来iOS7.1如果要在代码中手动设置标签栏图标,需要单独设置tabBarItem.selectedImage,而在

标签: ios objective-c xcode cocoa-touch ios7


【解决方案1】:
cmets 中的

bjtitus 正确回答了我。我现在改用以下代码(在创建标签栏而不是在委托上),这解决了问题:

UITabBarItem *tb0 = (UITabBarItem *)(tabController.tabBar.items)[0]; //main
UITabBarItem *tb1 = (UITabBarItem *)(tabController.tabBar.items)[1]; //wishlist
UITabBarItem *tb2 = (UITabBarItem *)(tabController.tabBar.items)[2];
UITabBarItem *tb3 = (UITabBarItem *)(tabController.tabBar.items)[3];
UITabBarItem *tb4;

if ([tabController.tabBar.items count] > 4)
    tb4 = (UITabBarItem *)(tabController.tabBar.items)[4];

if ([[[NSBundle mainBundle] objectForInfoDictionaryKey:@"MultiApp"] boolValue])
{
    tb2.selectedImage = [UIImage imageNamed:@"settings-icon-ios7-pressed"];
    tb3.selectedImage = [UIImage imageNamed:@"appswitch-tab-ios7-pressed"];
    tb4.selectedImage = [UIImage imageNamed:@"help-icon-ios7-pressed"];
}
else
{
    tb2.selectedImage = [UIImage imageNamed:@"settings-icon-ios7-pressed"];
    tb3.selectedImage = [UIImage imageNamed:@"help-icon-ios7-pressed"];
}

【讨论】:

    猜你喜欢
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2018-12-28
    • 1970-01-01
    • 2013-12-17
    • 2011-05-25
    • 2022-10-19
    相关资源
    最近更新 更多