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

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

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

Ответы [ 12 ]

0 голосов
/ 30 января 2013

Вы можете сделать это без -insertSubview:atIndex, потому что новый UIView не нужен. Вы можете применить тему, используя QuartzCore к каждому представлению (UITabBar и его подпредставления). Так что фон UITabBar добавлен так, как я описал здесь .

Теперь мы должны применить изображение к каждому UITabBarItem в качестве фона:

    // UITabBar+CustomItem.h
    #import <UIKit/UIKit.h>
    #import <QuartzCore/QuartzCore.h>

    @interface UITabBar (CustomItem)
    -(void)setSelectedItemBackground:(UIImage *)backgroundImage;
    @end

Теперь файл .m:

    // UITabBar+CustomItem.m

    @implementation UITabBar (CustomItem)

    #define kItemViewTag      445533  // <-- casual number
    #define kItemViewOldTag   445599  // <-- casual number different from the above

    -(void)setSelectedItemBackground:(UIImage *)backgroundImage   {
        UIView *oldView = [self viewWithTag:kImageViewItemTag];
        oldView.layer.contents = nil;  // <-- remove the previous background
        oldView.tag = kItemViewOldTag;  // <-- this will avoid problems

        NSUInteger index = [self.items indexOfObject:self.selectedItem];
        UIView *buttonView = [self.subviews objectAtIndex:index];
        buttonView.tag = kItemViewTag;
        buttonView.layer.contents = (id)backgroundImage.CGImage;  // <-- add 
        // the new background
    }

    @end

Вы также можете изменить цвет выбранных изображений, как кто-то сделал здесь . Но вот что мне интересно: могу ли я изменить цвет выбранной этикетки? Ответ "да", как описано ниже (ниже работает на iOS 3.x / 4.x, а не iOS5 +):

    @implementation UITabBar (Custom)

    #define kSelectedLabel  334499  // <-- casual number        

    -(void)changeCurrentSelectedLabelColor:(UIColor *)color  {
        UIView *labelOldView = [self viewWithTag:kSelectedLabel];
        [labelOldView removeFromSuperview];

        NSString *selectedText = self.selectedItem.title;
        for(UIView *subview in self.subviews)  {
            if ([NSStringFromClass([subview class]) 
                      isEqualToString:@"UITabBarButton"])  {
                for(UIView *itemSubview in subview.subviews)  {
                    if ([itemSubview isKindOfClass:[UILabel class]])  {
                         UILabel *itemLabel = (UILabel *)itemSubview;
                         if([itemLabel.text isEqualToString:selectedText])  {
                              UILabel *selectedLabel = [[UILabel alloc]
                                               initWithFrame:itemLabel.bounds];
                              selectedLabel.text = itemLabel.text;
                              selectedLabel.textColor = color;
                              selectedLabel.font = itemLabel.font;
                              selectedLabel.tag = kSelectedLabel;
                              selectedLabel.backgroundColor = [UIColor clearColor];
                              [itemSubview addSubview:selectedLabel];
                              [selectedLabel release];
                         }
                    }
                }

            }
        }
    }

    @end 
0 голосов
/ 09 мая 2012

Приведенный ниже код поможет вам добавить пользовательские цвета со значениями RGB в ur tabBar.

self.tabBarController.tabBar.tintColor = [[UIColor alloc] initWithRed:0.00
                                                                green:0.62
                                                                 blue:0.93
                                                                alpha:1.0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...