2015-01-11 23 views
6

Próbowałem zmienić wybrany obraz na UITabBar. Postępowałem zgodnie z procedurami wymienionymi na innych pytaniach Stackoverflow, ale nic nie działa. sekcjęZmienianie wybranego obrazu na UITabBarItem w Swift

Próbowałem ustawienie obrazu poprzez środowiskiem użytkownika zdefiniowane atrybuty, a także starał dodanie następujących do AppDelegate.swift:

var tabBarController = self.window!.rootViewController as UITabBarController 
let tabItems = tabBarController.tabBar.items as [UITabBarItem] 

var selectedImage0 = UIImage(named:"NewsfeedTabSelected") 
selectedImage0?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) 
tabItems[0].selectedImage = selectedImage0 

nie dały żadnych rezultatów. Zrobiłem println (tabItems [0] .title) i które wyprowadzają poprawny tytuł, więc wiem, że działa odwołanie do TabBarItem.

Jakieś myśli?

+0

Czy próbowałeś użyć wybranego obrazu w storybooku? – AMAN77

Odpowiedz

10

Rozwiązałem przy użyciu czegoś takiego na AppDelegate.

var tabBarController = self.window!.rootViewController as UITabBarController 
var tabBar = tabBarController.tabBar as UITabBar 

var tabBarItem1 = tabBar.items![0] as UITabBarItem 
var tabBarItem2 = tabBar.items![1] as UITabBarItem 
var tabBarItem3 = tabBar.items![2] as UITabBarItem 

tabBarItem1.selectedImage = UIImage(named: "FirstSelectedImage") 
tabBarItem2.selectedImage = UIImage(named: "SecondSelectedImage") 
tabBarItem3.selectedImage = UIImage(named: "ThirdSelectedImage") 
+0

Ale jest pewien błąd w szybkim tempie, ponieważ tekst tabBarItem2 znika, kiedy go stukam. – petesalt

5

Poprzednia odpowiedź nie w pełni działa. Muszę ustawić nowy 's UIImageRenderingMode na AlwaysOriginal, to rozwiązuje moją sytuację.

kod poniżej:

import UIKit 

class MainTab: UITabBarController { 

override func viewDidLoad() { 

    var tabBar = self.tabBar 

    var homeSelectImage: UIImage! = UIImage(named: "firstPageSelected")?.imageWithRenderingMode(.AlwaysOriginal) 
    var qaSelectImage: UIImage! = UIImage(named: "Q&ASelected")?.imageWithRenderingMode(.AlwaysOriginal) 
    var mySelectImage: UIImage! = UIImage(named: "myBagSelected")?.imageWithRenderingMode(.AlwaysOriginal) 

    (tabBar.items![0] as! UITabBarItem).selectedImage = homeSelectImage 
    (tabBar.items![1] as! UITabBarItem).selectedImage = qaSelectImage 
    (tabBar.items![2] as! UITabBarItem).selectedImage = mySelectImage 

    tabBar.tintColor = UIColor.greenColor() 

} 
} 

nadzieja, że ​​pracować dla ciebie

+0

dziękuję, żebym uratował mój czas – Haseeb

+0

Duży + na UIImageRenderingMode w końcu zabrał mnie do rozwiązań – guru

1

podklasy/przedłużyć TabBarController i wdrożenie tych metod (wiem, że to obj-c, ale to powinno działać jako bezpośrednio tłumaczone SWIFT):

#import "const.h" 
#import "MainTabBarController.h" 

@interface MainTabBarController() 

@end 

@implementation MainTabBarController 

- (NSArray*)tabTitles { 
    return @[@"Connection", 
      @"Details", 
      [[NSUserDefaults standardUserDefaults] objectForKey:@"LastProfileResponse"] ? @"Profile" : @"Login", 
      @"Settings"]; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 


    NSArray *imageNames = @[@"connection_tab_", 
          @"details_tab_", 
          @"profile_tab_", 
          @"settings_tab_" 
          ]; 

    for (int i = 0; i < self.tabBar.items.count; ++i) { 
     ((UITabBarItem*)self.tabBar.items[i]).title = self.tabTitles[i]; 

     ((UITabBarItem*)self.tabBar.items[i]).selectedImage = [UIImage imageNamed:[imageNames[i] stringByAppendingString:@"on"]]; 

     ((UITabBarItem*)self.tabBar.items[i]).image = [[UIImage imageNamed:[imageNames[i] stringByAppendingString:@"off"]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
    } 

    self.tabBar.translucent = false; 
    self.tabBar.barTintColor = SLATE_GREEN; 
    self.tabBar.tintColor = YELLOW; 
    self.delegate = self; 

    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:WHITE, 
                           NSForegroundColorAttributeName, 
                           TAB_FONT, 
                           NSFontAttributeName, nil] 
              forState:UIControlStateNormal]; 
    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:YELLOW, 
                           NSForegroundColorAttributeName, nil] 
              forState:UIControlStateSelected]; 
} 
Powiązane problemy