Как изменить цвет фона UITabItem при выборе элемента

Мне нужен другой цвет фона, когда пользователь выбирает элемент панели вкладок, чем когда он не выбран.

Ответы

Ответ 1

Поместите это в Appdelegate.m в application didFinishLaunchingWithOptions

UIImage *whiteBackground = [UIImage imageNamed:@"whiteBackground"];
[[UITabBar appearance] setSelectionIndicatorImage:whiteBackground];

Ответ 2

если вы используете раскадровку или xibs, нажмите "Tab Bar" и добавьте путь "selectedImageTintColor" в тег атрибутов Key Path Attributes. Вот так:

enter image description here

Ответ 3

ОБНОВЛЕНИЕ: Начиная с версии iOS 7.1 этот метод больше не работает (если пользователь дважды удаляет одну и ту же вкладку, цвет фона очищается).


UITabBarItem является подклассом UIBarItem, все более болезненно, потому что UIBarItem не подклассы UIView; однако UITabBarItem содержит один. Что следует за манипулированием этим представлением, и поэтому может быть отклонено, если оно отправлено в AppStore.

1) Подкласс UITabBarItem

Создайте подкласс UITabBarItem и добавьте новое свойство selected в его заголовок, например:

@interface ALDTabBarItem : UITabBarItem
@property (nonatomic, assign, getter = isSelected) BOOL selected;
@end

UITabBarItems имеет свойство view, но оно не отображается. Мы можем расширить класс для доступа к нему, а затем создать пользовательский сеттер в свойстве selected для изменения цвета фона, например:

#import "ALDTabBarItem.h"

@interface ALDTabBarItem (ALD)
@property (nonatomic, strong) UIView *view;
@end

@implementation ALDTabBarItem

- (void)setSelected:(BOOL)selected
{
    if(selected)
        self.view.backgroundColor = [UIColor redColor];
    else
        self.view.backgroundColor = [UIColor clearColor];
} 

@end

2) Обновите делегат UITabBarController

Добавьте следующий код в делегат вашего UITabBarController, который устанавливает выбранные состояния UITabBar:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
    for(ALDTabBarItem *myItem in tabBar.items)
        myItem.selected = (myItem == item);
}

Ответ 4

В Swift

UITabBar.appearance().selectionIndicatorImage = UIImage(named: "tabSelected")

с изображением [email protected] размером 98x98 пикселей

Ответ 5

Выполните следующие шаги:

  • Создайте SubClass UITabBarController

  • Перейдите к viewDidAppear подкласса UITabBarController

  • Теперь найдите размер TabBarItem,

    UITabBar *tabBar = self.tabBar;
    CGSize imgSize = CGSizeMake(tabBar.frame.size.width/tabBar.items.count,tabBar.frame.size.height);
    
  • Теперь создайте изображение с этим размером,

    //Create Image
    UIGraphicsBeginImageContextWithOptions(imgSize, NO, 0);
    UIBezierPath* p =
    [UIBezierPath bezierPathWithRect:CGRectMake(0,0,imgSize.width,imgSize.height)];
    [[UIColor blueColor] setFill];
    [p fill];
    UIImage* finalImg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
  • Теперь присвойте этому изображению TabBar SelectionIndicatorImage

    [tabBar setSelectionIndicatorImage:finalImg];
    

Ответ 6

Пожалуйста, обратитесь к ссылкам ниже.

Изменение цвета оттенка/цвета UITabBar

Как изменить цвет панели вкладок в Xcode

надеюсь, что это поможет вам.

попробуйте изменить цвет элемента вкладки, но он работает только в ios5.

if ([UITabBar instancesRespondToSelector:@selector(setSelectedImageTintColor:)])
{
    [tabBarController.tabBar setSelectedImageTintColor:[UIColor redColor]];
}

Ответ 7

Мой ответ похож на @Mehul Thakkar, но он находится в Swift 4 и для улучшения его ответа я бы сказал, что если вы поместите код в viewDidAppear поскольку он предлагает пользователям увидеть, как происходит изменение, которое не является хорошим пользовательским интерфейсом.

Итак, создайте пользовательский класс для вашего контроллера таблеток и в viewDidLoad введите следующий код:

let singleTabWidth: CGFloat = self.tabBar.frame.size.width / CGFloat((self.tabBar.items?.count)!)
let singleTabSize = CGSize(width:singleTabWidth , height: self.tabBar.frame.size.height)

let selectedTabBackgroundImage: UIImage = self.imageWithColor(color: .white, size: singleTabSize)
self.tabBar.selectionIndicatorImage = selectedTabBackgroundImage

Функция imageWithColor ниже для вас:

//image with color and size
    func imageWithColor(color: UIColor, size: CGSize) -> UIImage {
        let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
        UIGraphicsBeginImageContext(rect.size)
        let context = UIGraphicsGetCurrentContext()

        context!.setFillColor(color.cgColor)
        context!.fill(rect)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return image!
    }

Надеюсь, это поможет кому-то.

Ответ 8

Вы можете использовать tintcolor.

[[UITabBar appearance] setSelectedImageTintColor:[UIColor redColor]];

В AppDelegate.m поместите следующий код после//Заменить точку для настройки после запуска приложения.

Ответ 9

Поместите это в файл AppDelegate.m:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
            // Override point for customization after application launch.

            [UITabBar appearance].selectionIndicatorImage = [UIImage imageNamed:@"activeTabBackgroundImage"];


            return YES;
        }

Ответ 10

В настоящее время в Xcode 8.3.2 вы можете сделать это внутри раскадровки, используя изображение, которое будет представлять фактический фон.

Выберите панель вкладок внутри вашего контроллера панели вкладок:

введите описание изображения здесь

Внутри утилиты выберите Инспектор атрибутов и измените фоновое изображение выбора:

введите описание изображения здесь