Пользовательские цвета в UITabBar - PullRequest
40 голосов
/ 24 марта 2009

Можно ли использовать пользовательские цвета и фоновые изображения в UITabBar? Я понимаю, что Apple хотела бы, чтобы все использовали одинаковые синие и серые панели вкладок, но есть ли способ настроить это?

Во-вторых, даже я должен был создать свой собственный TabBar-подобный контроллер представления, наряду с пользовательскими изображениями, это нарушило бы Руководство по интерфейсу Apple для человека?

Ответы [ 12 ]

30 голосов
/ 06 мая 2009

Я нашел ответ на этот вопрос в Silent Mac Design .

Я реализовал так:

Сначала создайте подкласс UITabBarContoller

// CustomUITabBarController.h

#import <UIKit/UIKit.h>

@interface CustomUITabBarController: UITabBarController {
  IBOutlet UITabBar *tabBar1;
}

@property(nonatomic, retain) UITabBar *tabBar1;

@end

1010 *

// CustomUITabBarController.m

#import "CustomUITabBarController.h"

@implementation CustomUITabBarController

@synthesize tabBar1;

- (void)viewDidLoad {
  [super viewDidLoad];

  CGRect frame = CGRectMake(0.0, 0, self.view.bounds.size.width, 48);

  UIView *v = [[UIView alloc] initWithFrame:frame];

  [v setBackgroundColor:[[UIColor alloc] initWithRed:1.0
                                               green:0.0
                                                blue:0.0
                                               alpha:0.1]];

  [tabBar1 insertSubview:v atIndex:0];
  [v release];
}

@end

И в вашем Nib-файле замените класс вашего контроллера TabBar на CustomUITabBarController.

20 голосов
/ 16 ноября 2011

FYI, начиная с iOS 5 и далее, вы можете настраивать различные аспекты UITabBar, включая настройку его фонового изображения с помощью свойства backgroundImage .

Новые UITabBar Свойства "Настройка внешнего вида" в iOS 5:

backgroundImage 
selectedImageTintColor  
selectionIndicatorImage  
tintColor  

Учитывая то, что Apple представила эти методы в iOS 5, возможно, они более сочувствуют попыткам настроить UITabBar для более ранних ОС. На этом веб-сайте написано, что приложение Twitter использует настраиваемую панель вкладок, поэтому это может быть еще одна причина, по которой Apple может добавить такое приложение в App Store, однако это не гарантия!

14 голосов
/ 01 июля 2011

Использовать следующие изображения (при условии, что tabBar имеет 5 вкладок следующим образом)

  • enter image description here
  • enter image description here
  • enter image description here
  • enter image description here
  • enter image description here

Создайте новый проект с помощью шаблона «Приложение TabBar» и разместите следующий код.

Содержимое файла AppDel.h.

#import <UIKit/UIKit.h>

@interface cTabBarAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {

}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) IBOutlet UIImageView *imgV;

@end

Содержимое файла AppDel.m.

#import "cTabBarAppDelegate.h"

@implementation cTabBarAppDelegate
@synthesize window=_window;
@synthesize tabBarController=_tabBarController;
@synthesize imgV = _imgV;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.tabBarController.delegate=self;
    self.imgV.frame=CGRectMake(0, 425, 320, 55);
    [self.tabBarController.view addSubview:self.imgV];
    self.tabBarController.selectedIndex=0;
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{
    NSUInteger index=[[tabBarController viewControllers] indexOfObject:viewController];
    switch (index) {
        case 0:
            self.imgV.image=[UIImage imageNamed:@"tBar1.png"];
            break;
        case 1:
            self.imgV.image=[UIImage imageNamed:@"tBar2.png"];
            break;
        case 2:
            self.imgV.image=[UIImage imageNamed:@"tBar3.png"];
            break;
        case 3:
            self.imgV.image=[UIImage imageNamed:@"tBar4.png"];
            break;
        case 4:
            self.imgV.image=[UIImage imageNamed:@"tBar5.png"];
            break;
        default:
            break;
    }
    return YES;
}
9 голосов
/ 03 мая 2010

В начале *** ViewController.m добавить следующее может помочь установить фоновое изображение UITabBar.


@implementation UITabBar (CustomImage)
- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed: @"background.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
6 голосов
/ 19 ноября 2010

Если вы хотите использовать пользовательские цвета для значков (а не только фон) вместо серого и синего по умолчанию, сделайте это следующим образом: http://blog.theanalogguy.be/2010/10/06/custom-colored-uitabbar-icons/

По сути, вам необходимо создать полные изображения панели вкладок (фон, значки и текст) для каждой выбранной вкладки, установить для UITabBarItems значение без значка и без заголовка и вставить изображение на панель вкладок в виде UIImageView в viewWillAppear:

И Apple не будет возражать, поскольку мы не используем какие-либо частные API.

4 голосов
/ 25 марта 2014

Начиная с iOS 7.0, вы можете использовать - [UIImage imageWithRenderingMode:] с UIImageRenderingModeAlwaysOriginal для сохранения цветов:

// Preserve the colors of the tabs.
UITabBarController *controller = (UITabBarController *)((UIWindow *)[UIApplication sharedApplication].windows[0]).rootViewController;

NSArray *onIcons = @[ @"tab1-on", @"tab2-on", @"tab3-on" ];
NSArray *offIcons = @[ @"tab1-off", @"tab2-off", @"tab3-off" ];
NSArray *items = controller.tabBar.items;
for (NSUInteger i = 0; i < items.count; ++i) {
    UITabBarItem *item = items[i];
    item.image = [[UIImage imageNamed:offIcons[i]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    item.selectedImage = [[UIImage imageNamed:onIcons[i]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}

Работает как шарм.

2 голосов
/ 08 июня 2012

В AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UITabBar appearance] setSelectedImageTintColor:[UIColor redColor]];
return YES;
}
1 голос
/ 03 мая 2012

Это возможно без добавления какого-либо подпункта.

В классе, в котором вы определяете панель вкладок, задайте свойство tabBarItem to - >>

UITabBarItem *tabBarItem1 = [[self.tabBar.tabBar items] objectAtIndex:0];
[tabBarItem1 setFinishedSelectedImage:[UIImage imageNamed:@"campaigns_hover.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"campaigns.png"]];

Свойство tabBarItem, и вы можете изменить изображение по умолчанию синий для пользовательского изображения. campaigns_hover.png - это выбранное пользовательское изображение AND campaigns.png - это пользовательское изображение, когда оно не выбрано ...

Насладись секретом .. :)

1 голос
/ 30 августа 2010

Вот документ, в котором говорится, что мы не можем изменить нажатый или выбранный вид с помощью наших значков.

https://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/MobileHIG/IconsImages/IconsImages.html#//apple_ref/doc/uid/TP40006556-CH14-SW1

Это под заголовком Иконки для панелей навигации, панелей инструментов и панелей вкладок

1 голос
/ 24 марта 2009

Что касается класса UITabBar, значки на панели ограничены цветами: синим для выбранного и серым для невыбранного. Это связано с тем, что для создания изображения на панели вкладка использует только альфа-значение из значков, которые вы указали.

Сам бар, насколько я помню, ограничен черным. Я не видел ничего подобного свойству 'tint' на UINavigationBar в документах.

Полагаю, вы могли бы пойти дальше и создать свой собственный класс стилей для панели вкладок и делать с ним все, что хотите, но я абсолютно не представляю, как это согласуется с HIG от Apple, и будут ли они оспаривать это во время процесс рассмотрения.

По моему опыту, обозреватели Apple отклонили мое приложение, только если я не использовал элементы THEIR UI в соответствии с HIG. Они могут иметь другое представление, когда вы играете с собственными элементами пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...