UITabBar не отображает выбранные изображения элементов в ios 7
Значки хорошо видны в ios 6, но не в ios 7. Я устанавливаю выбранное состояние в методе viewController viewDidLoad. Когда пользователь выбирает элемент панели вкладок, изображение исчезает.
Вот мой код:
UITabBar *tabBar = self.tabBarController.tabBar;
if ([UITabBar instancesRespondToSelector:@selector(setSelectedImageTintColor:)]) {
[self.tabBarController.tabBar setSelectedImageTintColor:[UIColor whiteColor]];
}
UITabBarItem *item0 = [tabBar.items objectAtIndex:0];
UITabBarItem *item1 = [tabBar.items objectAtIndex:1];
UITabBarItem *item2 = [tabBar.items objectAtIndex:2];
UITabBarItem *item3 = [tabBar.items objectAtIndex:3];
[item0 setTitle:@"Home"];
[item1 setTitle:@"Calendar"];
[item2 setTitle:@"News"];
[item3 setTitle:@"My Events"];
[item0 setFinishedSelectedImage:[UIImage imageNamed:@"homeIconSelected.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"home2.png"]];
[item1 setFinishedSelectedImage:[UIImage imageNamed:@"Calendar"] withFinishedUnselectedImage:[UIImage imageNamed:@"CalendarIconSelected"]];
[item2 setFinishedSelectedImage:[UIImage imageNamed:@"NewsIconSelected"] withFinishedUnselectedImage:[UIImage imageNamed:@"News"]];
[item3 setFinishedSelectedImage:[UIImage imageNamed:@"EventsIconSelected"] withFinishedUnselectedImage:[UIImage imageNamed:@"Events"]];
[item1 imageInsets];
[item2 imageInsets];
[item3 imageInsets];
Ответы
Ответ 1
Вам нужно использовать tabBarItem initWithTitle:image:selectedImage
[[UITabBarItem alloc] initWithTitle:@"title" image:image selectedImage:imageSel];
в сочетании с изменением режима рендеринга UIImage:
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal
или (чтобы применить маску оттенков шаблона родительских представлений, эта опция по умолчанию для элементов панели табуляции, если вы не откажетесь в указанном выше режиме рендеринга)
imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate
Вот пример кода для одного элемента панели вкладок: -
UIImage *musicImage = [UIImage imageNamed:@"music.png"];
UIImage *musicImageSel = [UIImage imageNamed:@"musicSel.png"];
musicImage = [musicImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
musicImageSel = [musicImageSel imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.musicViewController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Music" image:musicImage selectedImage:musicImageSel];
Надеюсь, что это поможет
Ответ 2
Настроить режим рендеринга изображения позиции элемента оригинала может решить эту проблему.
Это можно сделать, используя изображения в .xcassets, поэтому вам не нужно писать много кодов.
Первый шаг, drap & падение ваших изображений штриховки в Assets.xcassets.
На втором шаге выберите изображение элемента панели и измените [Render As] на [Original Image]
![введите описание изображения здесь]()
ps: Я обычно устанавливаю элементы панели вкладки TabBarController на панели рассказов, чтобы не писать много кода.
![введите описание изображения здесь]()
Ответ 3
Добавьте эти строки кодов в
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UITabBar *tabBar = tabBarController.tabBar;
UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0];
UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1];
UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2];
UITabBarItem *tabBarItem4 = [tabBar.items objectAtIndex:3];
tabBarItem1.selectedImage = [[UIImage imageNamed:@"selectimg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem1.image = [[UIImage imageNamed:@"deselectimg"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem1.title = @"xxxx";
tabBarItem2.selectedImage = [[UIImage imageNamed:@"selectimg"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem2.image = [[UIImage imageNamed:@"deselectimg"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem2.title = @"xxxx";
tabBarItem3.selectedImage = [[UIImage imageNamed:@"selectimg"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem3.image = [[UIImage imageNamed:@"deselectimg"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem3.title = @"xxxx";
tabBarItem4.selectedImage = [[UIImage imageNamed:@"selectimg"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem4.image = [[UIImage imageNamed:@"deselectimg"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem4.title = @"xxxx";
return YES;
}
это работает для меня... и надеюсь на лучшее...
Ответ 4
Никакие ответы не помогли устранить эту проблему. Основная причина в том, что мой TabBarController
не был моим RootViewController
.
Решение, которое я использовал для раскадровки, и просто нажал на мой UITabButton
, и я добавил атрибут runtime для selectedImage
:
![]()
Для каждого из разных представлений, связанных с UITabController
.
Ответ 5
Проведя пару часов, пытаясь заставить мою настраиваемую вкладку работать как для iOS 6, так и для 7, это то, что сработало для меня...
UITabBarController *tabBarController = (UITabBarController *)[[self window] rootViewController];
UITabBar *tabBar = tabBarController.tabBar;
UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0];
UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1];
UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2];
UITabBarItem *tabBarItem4 = [tabBar.items objectAtIndex:3];
tabBarItem1.title = @"Home";
tabBarItem2.title = @"Map";
tabBarItem3.title = @"Weather";
tabBarItem4.title = @"Info";
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 7) {
[tabBarItem1 setFinishedSelectedImage:[UIImage imageNamed:@"cyexplore_home_white.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"cyexplore_home_black.png"]];
[tabBarItem2 setFinishedSelectedImage:[UIImage imageNamed:@"cyexplore_cloud_white.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"cyexplore_cloud_black.png"]];
[tabBarItem3 setFinishedSelectedImage:[UIImage imageNamed:@"cyexplore_map_white.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"cyexplore_map_black.png"]];
[tabBarItem4 setFinishedSelectedImage:[UIImage imageNamed:@"cyexplore_info_white.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"cyexplore_info_black.png"]];
} else {
tabBarItem1.selectedImage = [[UIImage imageNamed:@"cyexplore_home_white"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem1.image = [[UIImage imageNamed:@"cyexplore_home_black"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem2.selectedImage = [[UIImage imageNamed:@"cyexplore_cloud_white"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem2.image = [[UIImage imageNamed:@"cyexplore_cloud_black"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem3.selectedImage = [[UIImage imageNamed:@"cyexplore_map_white"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem3.image = [[UIImage imageNamed:@"cyexplore_map_black"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem4.selectedImage = [[UIImage imageNamed:@"cyexplore_info_white"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
tabBarItem4.image = [[UIImage imageNamed:@"cyexplore_info_black"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
}
UIImage* tabBarBackground = [UIImage imageNamed:@"tabbar.png"];
[[UITabBar appearance] setBackgroundImage:tabBarBackground];
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"tabbar_selected.png"]];
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor blackColor], UITextAttributeTextColor, nil] forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor, nil] forState:UIControlStateSelected];
Ответ 6
Если вы работаете с раскадными страницами, вам нужно поместить идентификатор: "custom" в Navigation Controller.
тогда:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Assign tab bar item with titles
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UITabBar *tabBar = tabBarController.tabBar;
UITabBarItem *tabBarItem1 = [tabBar.items objectAtIndex:0];
UITabBarItem *tabBarItem2 = [tabBar.items objectAtIndex:1];
UITabBarItem *tabBarItem3 = [tabBar.items objectAtIndex:2];
(void)[tabBarItem1 initWithTitle:nil image:[UIImage imageNamed:@"home.png"] selectedImage:[UIImage imageNamed:@"home_selected.png"]];
(void)[tabBarItem2 initWithTitle:nil image:[UIImage imageNamed:@"home.png"] selectedImage:[UIImage imageNamed:@"home_selected.png"]];
(void)[tabBarItem3 initWithTitle:nil image:[UIImage imageNamed:@"home.png"] selectedImage:[UIImage imageNamed:@"home_selected.png"]];
// Change the tab bar background
UIImage* tabBarBackground = [UIImage imageNamed:@"tabbar.png"];
[[UITabBar appearance] setBackgroundImage:tabBarBackground];
return YES;
}
Это работает для меня.
Ответ 7
Ни один из ответов не работал у меня - я использую MonoTouch, но если вы установите свойство TintColor
самого UITabBar
, которое выделит выбранное изображение с этим цветом. В obj c может быть функция setTintColor
.
Ответ 8
У меня была такая же проблема с Xcode 6.0.1 (6A317), кажется, ошибка с построителем интерфейса.
Тем не менее, мне удалось решить эту проблему, оставив selected image
пустым в построителе интерфейса, а затем в каждом viewDidLoad
в моих контроллерах, которые я вставлял:
[self.navigationController.tabBarItem setSelectedImage:[UIImage imageNamed:@"imagename-selected"]];
теперь он работает хорошо, показывая мой selectedImage
и с глобальной маской оттенка.
Ответ 9
Основываясь на ответе от 132206, я сделал этот метод для AppDelegate, вызванный от application:didFinishLaunchingWithOptions:
с помощью:
[self configureSelectedImages];
Это явно требует строгого соглашения об именах для ваших изображений вкладок, но также может быть повторно использовано без редактирования. Чтобы указать очевидное - назовите выбранные вами вкладки TabbarXXXSelected, где XXX равно названию элемента панели табуляции.
- (void)configureSelectedImages
{
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UITabBar *tabBar = tabBarController.tabBar;
for (UITabBarItem *tabBarItem in [tabBar items]) {
NSString *selectedImage = [NSString stringWithFormat:@"Tabbar%@Selected", [tabBarItem title]];
(void)[tabBarItem initWithTitle:[tabBarItem title] image:[tabBarItem image] selectedImage:[UIImage imageNamed:selectedImage]];
}
}
Ответ 10
Вы должны написать функции:
UIImage* tab_image = [UIImage imageNamed:@"tab_image.png"];
UIImage* tab_image_selected = [UIImage imageNamed:@"tab_image_selected.png"];
tab_image = [tab_image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
tab_image_selected = [tab_image_selected imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.tabBarItem.image = tab_image;
self.tabBarItem.selectedImage = tab_image_selected;
Я надеюсь, что это поможет
Ответ 11
В вашем первом файле контроллера .h, я добавил следующее: @property (слабый, неатомный) IBOutlet UITabBarItem * mapViewTabBarItem; @property (слабый, неатомный) IBOutlet UITabBarItem * profileViewTabBarItem; @property (слабый, неатомный) IBOutlet UITabBarItem * notificationViewTabBarItem;
(обратите внимание, что mapViewTabBarItem был связан ctrl, перетаскивая элемент фактической вкладки в список объявлений свойств в верхней части файла .h)
Далее, в том же файле .m файла представления в viewDidLoad, добавьте следующее:
self.tabBarItem = [self.tabBarController.tabBar.items objectAtIndex:0];
_mapViewTabBarItem.selectedImage = [[UIImage imageNamed:@"@2x-map-icon-selected.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
self.tabBarItem.image = [[UIImage imageNamed:@"@2x-map-icon.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
_profileViewTabBarItem = [self.tabBarController.tabBar.items objectAtIndex:1];
_profileViewTabBarItem.selectedImage = [[UIImage imageNamed:@"@2x-profile-icon-selected.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
_profileViewTabBarItem.image = [[UIImage imageNamed:@"@2x-profile-icon.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
_notificationViewTabBarItem = [self.tabBarController.tabBar.items objectAtIndex:2];
_notificationViewTabBarItem.selectedImage = [[UIImage imageNamed:@"@2x-notifications-icon-selected.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
_notificationViewTabBarItem.image = [[UIImage imageNamed:@"@2x-notifications-icon.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
Ответ 12
У меня была аналогичная проблема. Я создал панель вкладок в раскадровке и добавил все изображения через меню компоновщика интерфейса, ни один в коде.
Мое исправление на самом деле было простым: в окне инспектора атрибутов в IB поле поля "Панель табуляции" для "Выбранное изображение" должно быть пустым, а поле "Позиция элемента" для "Изображение" должно быть заполнено желаемым изображением.
Я запускаю Xcode 6.0.1 и тестирую с устройствами iOS 8.0.2.
Ответ 13
Попробуйте следующее:
UITabBarItem *item1 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"Icon-Small-50.png"] tag:100];
UITabBarItem *item2 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"image-50.png"] tag:200];
UITabBarItem *item3 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"Icon-clip-50.png"] tag:300];
UITabBarItem *item4 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"Icon-color-50.png"] tag:400];
UITabBarItem *item5 = [[UITabBarItem alloc] initWithTitle:@"" image:[UIImage imageNamed:@"Icon-lock-50.png"] tag:500];
[item1 setSelectedImage:[[UIImage imageNamed:@"Icon-Small-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[item1 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[item2 setSelectedImage:[[UIImage imageNamed:@"image-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[item2 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[item3 setSelectedImage:[[UIImage imageNamed:@"Icon-clip-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[item3 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[item4 setSelectedImage:[[UIImage imageNamed:@"Icon-color-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[item4 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[item5 setSelectedImage:[[UIImage imageNamed:@"Icon-lock-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
[item5 setImageInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
item1.image = [[UIImage imageNamed:@"Icon-Small-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
item2.image = [[UIImage imageNamed:@"image-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
item3.image = [[UIImage imageNamed:@"Icon-clip-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
item4.image = [[UIImage imageNamed:@"Icon-color-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
item5.image = [[UIImage imageNamed:@"Icon-lock-50.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
Ответ 14
У меня была такая же проблема. Но работа с StoryBoards помешала мне что-то изменить в коде. Оставив изображение, опущенное в раскадровке, удалило это препятствие для меня. Однако размещение initWithTitle в методе viewWillAppear в окне viewcontroller дало мне странное поведение. Сначала для получения выбранного изображения потребовался дополнительный щелчок, и изображения не отображались для не начальных вкладок.
Для меня это было добавление следующего кода в AppDelegate в DidFinishLoadingWithOptions (аналогично 132206 и Амитабхе):
NSArray * vcs = [(UITabBarController*)self.window.rootViewController viewControllers];
UIViewController *tab0 = [[(UINavigationController*)[vcs objectAtIndex:0] viewControllers] objectAtIndex:0];
tab0.title = NSLocalizedString(@"Time", nil);
tab0.tabBarItem = [[UITabBarItem alloc] initWithTitle:tab0.title image:[UIImage imageNamed:@"Recents.png"] selectedImage:[UIImage imageNamed:@"RecentsSolid.png"]];
UIViewController *tab1 = [[(UINavigationController*)[vcs objectAtIndex:1] viewControllers] objectAtIndex:0];
tab1.title = NSLocalizedString(@"Expense", nil);
tab1.tabBarItem = [[UITabBarItem alloc] initWithTitle:tab1.title image:[UIImage imageNamed:@"Euro.png"] selectedImage:[UIImage imageNamed:@"EuroSolid.png"]];
Ответ 15
Используйте следующий код, чтобы исправить проблему с изображением в iOS7:
[[UITabBarItem alloc] initWithTitle:@"title" image:[[UIImage imageNamed:@"YOUR_IMAGE.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] selectedImage:[[UIImage imageNamed:@"YOUR_SEL_IMAGE.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
Ответ 16
Это легкое и чистое решение категории для элементов UITabBar.
Просто создайте категорию и используйте Runtime Attribute и отнесите ее из категории, как показано ниже.
![Add Runtime Attribute for selected TabBarItem]()
![Refer it from category and make changes]()
#import "UITabBarItem+CustomTabBar.h"
@implementation UITabBarItem (CustomTabBar)
-(void)setValue:(id)value forKey:(NSString *)key {
if([key isEqualToString:@"tabtitle"]){
if([value isEqualToString:@"contacts"]) {
[self setSelectedImage:[[UIImage imageNamed:@"contacts-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
} else if([value isEqualToString:@"chat"]) {
[self setSelectedImage:[[UIImage imageNamed:@"chat-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
} else if([value isEqualToString:@"groupchat"]) {
[self setSelectedImage:[[UIImage imageNamed:@"groupchat-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
} else if([value isEqualToString:@"settings"]) {
[self setSelectedImage:[[UIImage imageNamed:@"settings-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
}
}
[self setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Roboto-Regular" size:12.0f], NSFontAttributeName, [UIColor grayColor], NSForegroundColorAttributeName, nil] forState:UIControlStateNormal];
}
@end
Ответ 17
Старые вопросы, но я также добавлю свое решение для Xamarin.iOS/С# и тех, кто хочет установить изображения через интерфейс-конструктор. Я установил атрибуты Selected Image
и Image
через Interface Builder. Затем в коде я определил метод InitTabs()
, подобный этому:
public void InitTabs(){
HomeTab.SelectedImage = HomeTab.SelectedImage.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal);
HomeTab.Image = HomeTab.Image.ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal);
}
Вызовите InitTabs()
в ViewDidLoad
, и теперь появится правильное изображение как для выбранного, так и для невыделенного состояния.
Ответ 18
Вот быстрое решение для Swift-Guys:)
class CustomTabBar: UITabBar {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let btnNames = ["Title1", "Title2", "Title3", "Title4"]
for (item, name) in zip(items!, btnNames) {
item.image = UIImage(named: "bar\(name)Btn")?.imageWithRenderingMode(.AlwaysOriginal)
item.selectedImage = UIImage(named: "bar\(name)SelectedBtn")?.imageWithRenderingMode(.AlwaysOriginal)
item.title = name
item.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blackColor()], forState: .Normal)
item.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.redColor()], forState: .Selected)
}
}
}
Что именно происходит здесь:
- Создайте массив заголовков btn и рассмотрите имена файлов изображений в соответствии с ними.
- Make For loop over tab bar и только что созданный массив заголовков btn
- Установите изображение barButtonItem и его выделенное изображение из массива
- Установить текст заголовка из массива
- Установить цвет текста заголовка для состояний .Normal и .Selected
Настройка цвета текста важна, если вы не хотите, чтобы заголовок заголовка элемента был серым для .Normal и blue для .Selected, как и по умолчанию. Это часто актуально, когда вы рассматриваете пользовательские изображения для элементов панели табуляции.
Ответ 19
Быстрая версия показа выбранных и невыделенных изображений и заголовков с API-интерфейсом UIAppearance
В вашем приложении Appdelegate.m скопируйте следующий код, если у вас есть базовое приложение. Следующий код предполагает, что у вас есть 4 панели вкладок.
let tabBarController: UITabBarController = (self.window!.rootViewController as! UITabBarController)
let tabBar:UITabBar = tabBarController.tabBar
let tabBarItem1:UITabBarItem = tabBar.items![0]
let tabBarItem2:UITabBarItem = tabBar.items![1]
let tabBarItem3:UITabBarItem = tabBar.items![2]
let tabBarItem4:UITabBarItem = tabBar.items![3]
tabBarItem1.title = "Home";
tabBarItem2.title = "Maps";
tabBarItem3.title = "My Plan";
tabBarItem4.title = "Settings";
tabBarItem1.selectedImage = UIImage(named: "home_selected.png")!
tabBarItem2.selectedImage = UIImage(named: "maps_selected.png")!
tabBarItem3.selectedImage = UIImage(named: "myplan_selected.png")!
tabBarItem4.selectedImage = UIImage(named: "settings_selected.png")!
tabBarItem1.image = UIImage(named: "home.png")!
tabBarItem2.image = UIImage(named: "maps.png")!
tabBarItem3.image = UIImage(named: "myplan.png")!
tabBarItem4.image = UIImage(named: "settings.png")!
let tabBarBackground: UIImage = UIImage(named: "tabbar.png")!
UITabBar.appearance().backgroundImage = tabBarBackground
UITabBar.appearance().selectionIndicatorImage = UIImage(named: "tabbar_selected.png")!
UITabBarItem.appearance().setTitleTextAttributes([
NSForegroundColorAttributeName : UIColor.whiteColor()
]
, forState: .Normal)
let titleHighlightedColor: UIColor = UIColor(red: 153 / 255.0, green: 192 / 255.0, blue: 48 / 255.0, alpha: 1.0)
UITabBarItem.appearance().setTitleTextAttributes([
NSForegroundColorAttributeName : titleHighlightedColor
]
, forState: .Highlighted)
Ответ 20
Попробовав все остальные ответы и изо всех сил, как только они потерпели неудачу, я нашел ответ. Другие ответы, похоже, не работают в текущей быстрой версии. В Swift 2.3 это работает для меня. Для тех, у кого по-прежнему возникают проблемы, попробуйте следующее:
tabBarItem.image = UIImage(named: "image_name")
searchVC.tabBarItem.selectedImage = UIImage(named:
"image_name_when_selected")?.imageWithRenderingMode(.AlwaysOriginal)