2015-01-11 2 views
6

Я пытался изменить выбранное изображение на UITabBar. Я следил за процедурами, перечисленными в других вопросах Stackoverflow, но ничего не работает.Изменение выбранного изображения на UITabBarItem в Swift

Я попытался установить изображение через User Defined Время воспроизведения Атрибуты раздела, а также попытался добавить следующее 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 

Это не дает никаких результатов. Я сделал println (tabItems [0] .title) и выдал правильный заголовок, поэтому я знаю, что ссылка на TabBarItem работает.

Любые мысли?

+0

Вы пытались использовать выбранное изображение в раскадровке? – AMAN77

ответ

10

Я решил использовать что-то подобное на 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

Но есть ошибка в swift, потому что текст tabBarItem2 исчезает, когда я нажимаю его. – petesalt

5

Предыдущий ответ не полностью работает. Мне нужно установить новый UIImageUIImageRenderingMode на AlwaysOriginal, это решает мою ситуацию.

код ниже:

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

} 
} 

Надежда, которые работают для вас

+0

спасибо, что сэкономлю свое время – Haseeb

+0

Большой + для UIImageRenderingMode, наконец, это привело меня к решениям – guru

1

Подкласса/расширить tabBarController и внедрить эти методы (я знаю, что это Obj-C, но она должна работать как непосредственно переведена на стриж):

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