Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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 вы можете сделать это внутри раскадровки, используя изображение, которое будет представлять фактический фон.

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

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

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

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