Мне нужен другой цвет фона, когда пользователь выбирает элемент панели вкладок, чем когда он не выбран.
Как изменить цвет фона UITabItem при выборе элемента
Ответ 1
Поместите это в Appdelegate.m
в application didFinishLaunchingWithOptions
UIImage *whiteBackground = [UIImage imageNamed:@"whiteBackground"];
[[UITabBar appearance] setSelectionIndicatorImage:whiteBackground];
Ответ 2
если вы используете раскадровку или xibs, нажмите "Tab Bar" и добавьте путь "selectedImageTintColor" в тег атрибутов Key Path Attributes. Вот так:
Ответ 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 вы можете сделать это внутри раскадровки, используя изображение, которое будет представлять фактический фон.
Выберите панель вкладок внутри вашего контроллера панели вкладок:
Внутри утилиты выберите Инспектор атрибутов и измените фоновое изображение выбора: