2013-09-11 3 views
2

Я разрабатываю приложение с вкладками, и я хочу интегрировать пользовательский фон и значки UITabbar. Я уже вставил пользовательский фон, но у меня проблема с значками.Пользовательские иконки UITabBar iOS

Это как значки должны выглядеть:

enter image description here

Но после добавления иконки для каждого вида в раскадровке я получаю серые иконки, как это:

enter image description here

У кого-нибудь есть идея, почему иконки отображаются таким образом?

спасибо!

ответ

1

Так я делаю это в одном из своих приложений. В ваших AppDelegates didFinishLaunchingWithOptions: метода, добавьте это и заполнить ваши имена изображений:

UITabBarController *tabController = (UITabBarController *)self.window.rootViewController; 

    //tab1 
    UIImage *selectedImage = [UIImage imageNamed:@"home-tab-selected"]; 
    UIImage *unselectedImage = [UIImage imageNamed:@"home2-tab"]; 
    MyTabBar *tabBar = (MyTabBar *)tabController.tabBar; 
    UITabBarItem *item1 = [tabBar.items objectAtIndex:0]; 
    [item1 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage]; 

    //tab2 
    selectedImage = [UIImage imageNamed:@"customers-tab-selected"]; 
    unselectedImage = [UIImage imageNamed:@"customers-tab"]; 
    UITabBarItem *item2 = [tabBar.items objectAtIndex:1]; 
    [item2 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage]; 

    //tab3 
    selectedImage = [UIImage imageNamed:@"maps-tab-selected"]; 
    unselectedImage = [UIImage imageNamed:@"maps-tab"]; 
    UITabBarItem *item3 = [tabBar.items objectAtIndex:2]; 
    [item3 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage]; 

    //tab4 
    selectedImage = [UIImage imageNamed:@"reports-tab-selected"]; 
    unselectedImage = [UIImage imageNamed:@"reports-tab"]; 
    UITabBarItem *item4 = [tabBar.items objectAtIndex:3]; 
    [item4 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage]; 

    //tab5 
    selectedImage = [UIImage imageNamed:@"orders-tab-selected"]; 
    unselectedImage = [UIImage imageNamed:@"orders-tab"]; 
    UITabBarItem *item5 = [tabBar.items objectAtIndex:4]; 
    [item5 setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unselectedImage]; 


    if ([tabBar respondsToSelector:@selector(setBackgroundImage:)]) 
    { 
     // ios 5 code here 
     [tabBar setBackgroundImage:[UIImage imageNamed:@"tab-bg"]]; 

    } 

Работает идеально подходит для меня.

+0

Большое спасибо. Работает как шарм :) – Granit

+0

Нет проблем! Я потратил много времени на изучение всех других подобных вопросов и обучающих программ по всему миру и нашел, что это решение работает лучше всего. – RyanG

+1

Я сбив с толку, почему xcode не позволит нам сделать это с помощью визуального интерфейса.Почему я хочу программно установить все изображения значков на панели табуляции, как это? – Zaqintosh

0

Вы можете установить готовый образ панели вкладок иконки с setFinishedSelectedImage:withFinishedUnselectedImage: на UITabBarItem

Проверьте документацию here (смотрите под Appearance)

поведение по умолчанию UITabBarItem будет создать маску на основе вашего значок, то это относится к тому, что особое синее лечение является вашим видением.

0

Вы также можете сохранить его простым;)

[tabBarItemName setSelectedImage:[UIImage imageNamed:@"image name"]]; 

Вы должны объявить tabBarItemName в вашем ViewController.h

2

Я не могу комментировать еще, так что я буду добавлять в ответ ,

Поскольку iOS 7 setFinishedSelectedImage:withFinishedUnselectedImage: устарел.

Чтобы решить эту проблему вы можете сделать это следующим образом:

UIImage *selectedImage = [UIImage imageNamed:@"tabbar-highlight"]; 
selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
UIImage *unselectedImage = [UIImage imageNamed:@"tabbar"]; 
unselectedImage = [unselectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
tabBarItem = [[UITabBarItem alloc] initWithTitle:@"TabBarItem1" image:unselectedImage selectedImage:selectedImage]; 
// 
//OR 
// 
UIImage *selectedImage = [UIImage imageNamed:@"tabbar-highlight"]; 
selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
UIImage *unselectedImage = [UIImage imageNamed:@"tabbar"]; 
unselectedImage = [unselectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
[yourTabBarItem setImage:unselectedImage]; 
[yourTabBarItem setSelectedImage:selectedImage]; 

Надеется, что это поможет прояснить для iOS7 +.

5

Использование Xcode 6, для того, чтобы иметь возможность изменять изображения непосредственно из раскадровки, вы можете сделать это:

@IBDesignable class CustomizedTabBarItem: UITabBarItem { 
    @IBInspectable var finalImage:UIImage = UIImage() { 
     didSet { 
      self.image = finalImage.imageWithRenderingMode(.AlwaysOriginal) 
     } 
    } 
    @IBInspectable var finalSelectedImage:UIImage = UIImage() { 
     didSet { 
      self.selectedImage = finalSelectedImage.imageWithRenderingMode(.AlwaysOriginal) 
     } 
    } 
} 

После, вы просто должны установить изображения в раскадровку enter image description here

0

Обновленная версия для ответа Жюльена о IBInspectable ниже

import UIKit 

@IBDesignable 
class CustomTabBarItem: UITabBarItem { 
    @IBInspectable var finalImage: UIImage = UIImage() { 
     didSet { 
      self.image = finalImage.withRenderingMode(.alwaysOriginal) 
      } 
     } 
    @IBInspectable var finalSelectedImage: UIImage = UIImage() { 
     didSet { 
      self.selectedImage = finalSelectedImage.withRenderingMode(.alwaysOriginal) 
      } 
     } 
} 
Смежные вопросы