2015-01-11 18 views
6

Ho cercato di modificare l'immagine selezionata su un UITabBar. Ho seguito le procedure elencate in altre domande StackOverflow, ma nulla sembra funzionare.Modifica immagine selezionata su UITabBarItem in Swift

Ho provato a fissare l'immagine attraverso la runtime definiti dall'utente Attributi sezione, così come provato aggiungendo la seguente 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 

Questo non produce risultati. Ho fatto un println (tabItems [0] .title) e questo ha prodotto il titolo corretto, quindi so che il riferimento al TabBarItem funziona.

Qualche idea?

+0

Hai provato a utilizzare l'immagine selezionata nello storyboard? – AMAN77

risposta

10

Ho risolto utilizzando qualcosa come questo su 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

Ma c'è qualche bug in rapido, perché il testo di tabBarItem2 scompare, quando lo tocco. – petesalt

5

La risposta precedente non funziona completamente. Devo impostare il nuovoa AlwaysOriginal, questo risolve la mia situazione.

codice

sotto:

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() 

} 
} 

Speranza che funziona per voi

+0

grazie amico risparmi il mio tempo – Haseeb

+0

Un grande + a UIImageRenderingMode finalmente questo mi ha portato alle soluzioni – guru

1

sottoclasse/estendere tabBarController e implementare questi metodi (lo so che è obj-c ma dovrebbe funzionare come direttamente tradotto in rapida):

#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]; 
} 
Problemi correlati