【问题标题】:setBackgroundImage on TabBar does not work when tapping items点击项目时,TabBar 上的 setBackgroundImage 不起作用
【发布时间】:2012-11-01 12:19:38
【问题描述】:

我可以设置一次背景,但之后就再也不会改变了。我在stackoverflow上看过所有的例子。代码示例看起来总是一样的。我已经设置了代表。图像一切正常。我已将它们一个接一个地设置为默认图像,并且将显示。但是在应用程序完成启动后,后台不再发生任何事情。

这是我的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self customizeInterface];

    // Override point for customization after application launch.
    self.tabController = (UITabBarController *)self.window.rootViewController;
    self.tabController.delegate = self;
...
}

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    int tabitem = self.tabController.selectedIndex;
    NSLog(@"tabitem: %i", tabitem);
    [self switchTabBarImage:tabitem];
    //[[tabController objectAtIndex:tabitem] popToRootViewControllerAnimated:YES];
}

- (void)switchTabBarImage:(int)selectedIndex
{
    NSLog(@"selected: %i", selectedIndex);
    if (selectedIndex == 0) {
        NSLog(@"0");
        UIImage *tabBarBackground = [UIImage imageNamed:@"tabbar-1.png"];
        [[UITabBar appearance] setBackgroundImage:tabBarBackground];
    }
    if (selectedIndex == 1) {
        NSLog(@"1");
        UIImage *tabBarBackground = [UIImage imageNamed:@"tabbar-2.png"];
        [[UITabBar appearance] setBackgroundImage:tabBarBackground];
    }
    if (selectedIndex == 2) {
        NSLog(@"2");
        UIImage *tabBarBackground = [UIImage imageNamed:@"tabbar-3.png"];
        [[UITabBar appearance] setBackgroundImage:tabBarBackground];
    }
    if (selectedIndex == 3) {
        NSLog(@"3");
        UIImage *tabBarBackground = [UIImage imageNamed:@"tabbar-4.png"];
        [[UITabBar appearance] setBackgroundImage:tabBarBackground];
    }
}

- (void)customizeInterface
{

    UIImage *tabBarBackground = [UIImage imageNamed:@"tabbar-1.png"];
    [[UITabBar appearance] setBackgroundImage:tabBarBackground];

    UIImage *selectionIndicator = [UIImage imageNamed:@"tabbar-icon-clean.png"];
    [[UITabBar appearance] setSelectionIndicatorImage:selectionIndicator];

}

调试器显示:

2012-11-13 02:42:06.147 soundapp[9060:c07] tabitem: 1
2012-11-13 02:42:06.148 soundapp[9060:c07] selected: 1
2012-11-13 02:42:06.148 soundapp[9060:c07] 1
2012-11-13 02:42:07.739 soundapp[9060:c07] tabitem: 2
2012-11-13 02:42:07.739 soundapp[9060:c07] selected: 2
2012-11-13 02:42:07.740 soundapp[9060:c07] 2

我搜索了好几个小时,但无法弄清楚为什么它只工作一次。有人看到我的代码有错误吗?

【问题讨论】:

    标签: objective-c ios uitabbarcontroller uitabbar setbackground


    【解决方案1】:

    又过了一个小时,我在网络上的其他地方找到了解决方案 (http://felipecypriano.com/2012/02/27/how-to-customize-uitabbar-on-ios-5/)

    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
    {
        int tabitem = self.tabController.selectedIndex;
        NSLog(@"tabitem: %i", tabitem);
        [self switchTabBarImage:tabitem];
        //[[tabController objectAtIndex:tabitem] popToRootViewControllerAnimated:YES];
    }
    
    - (void)switchTabBarImage:(int)selectedIndex
    {
    
        switch (selectedIndex) {
            case 0:
                [[[self tabController] tabBar] setBackgroundImage:[UIImage imageNamed:@"tabbar-1.png"]];
                break;
            case 1:
                [[[self tabController] tabBar] setBackgroundImage:[UIImage imageNamed:@"tabbar-2.png"]];
                break;
            case 2:
                [[[self tabController] tabBar] setBackgroundImage:[UIImage imageNamed:@"tabbar-3.png"]];
                break;
            case 3:
                [[[self tabController] tabBar] setBackgroundImage:[UIImage imageNamed:@"tabbar-4.png"]];
                break;
        }
    }
    
    - (void)customizeInterface
    {
    
        UIImage *tabBarBackground = [UIImage imageNamed:@"tabbar-1.png"];
        [[UITabBar appearance] setBackgroundImage:tabBarBackground];
    
        UIImage *selectionIndicator = [UIImage imageNamed:@"tabbar-icon-clean.png"];
        [[UITabBar appearance] setSelectionIndicatorImage:selectionIndicator];
    
    }
    

    我真的不明白为什么有两种不同的方式来改变背景。令人困惑的是,这两条不同的代码行只在不同的地方工作。我不明白。但现在可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 2022-01-07
      • 2019-01-26
      相关资源
      最近更新 更多