другой пользовательский цвет для uinavigationbar и предметов - PullRequest
1 голос
/ 01 августа 2011

В моем приложении я переопределяю цвет uinavigationbar в AppDelegate, чтобы создать этот цвет для всего приложения:

@implementation UINavigationBar (UINavigationBarCategory)

- (void)drawRect:(CGRect)rect {

UIColor *color = [UIColor colorWithRed:0.16
                                 green:0.20
                                  blue:0.32
                                 alpha:1];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColor(context, CGColorGetComponents( [color CGColor]));
CGContextFillRect(context, rect);
[self setBarStyle:UIBarStyleBlack];
[self setTintColor:color];


}

Однако в одном из моих представлений я хотел бы изменить цвет одного из элементов панели навигации на другой цвет, отличный от общего цвета выше, но только для одного из элементов - цвет панели должен оставаться то же самое (рассуждение - я хотел бы, чтобы элемент навигационной панели был зеленым и текст «Вкл.», и изменил бы его на красный с текстом «Выкл.», основанным на вводе пользователем).

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

- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
    [self.navigationController.navigationBar setTintColor:[UIColor greenColor]];
}

У кого-нибудь есть предложение (или лучший способ) сделать это?

Приветствия.

1 Ответ

0 голосов
/ 01 августа 2011

Это проверенный код, который будет работать на 100%.

// в приведенном ниже коде вы можете установить другое изображение для другого цвета

или

просто

заполните цвет своим кодом вопроса.

здесь для размещения изображения на панели навигации

вы можете настроить, удалив код изображения и вставив вышеупомянутый код другим цветом.это .logic такой же

CustomNavigation.h

    #import <Foundation/Foundation.h>


    @interface UINavigationBar (UINavigationBarCustomDraw){

    }

    @end

CustomNavigation.m

    @implementation UINavigationBar (UINavigationBarCustomDraw)

    - (void) drawRect:(CGRect)rect {

        [self setTintColor:[UIColor colorWithRed:0.5f
                                           green: 0.5f
                                            blue:0 
                                           alpha:1]];

        if ([self.topItem.title length] > 0) {


            if ([self.topItem.title isEqualToString:@"First"]) {

                [[UIImage imageNamed:@"First.png"] drawInRect:rect];

            }

            else if ([self.topItem.title isEqualToString:@"Second"]) {

                [[UIImage imageNamed:@"Second.png"] drawInRect:rect];                   

            }




            CGRect frame = CGRectMake(0, 0, 320, 44);
            UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];
            [label setBackgroundColor:[UIColor clearColor]];
            label.font = [UIFont boldSystemFontOfSize: 20.0];
            label.shadowColor = [UIColor colorWithWhite:0.0 alpha:1];
            label.textAlignment = UITextAlignmentCenter;
            label.textColor = [UIColor whiteColor];
            label.text = self.topItem.title;
            self.topItem.titleView = label;





        } 


        else {
            [[UIImage imageNamed:@"wood.png"] drawInRect:rect];
            self.topItem.titleView = [[[UIView alloc] init] autorelease];
        }



    }

    @end

, если вы хотите First.png, чтобы установить фоновое изображение navigationBar в FirstViewController, то

в вашем FirstViewController.m

        -(void) viewWillAppear:(BOOL)animated{

        [super viewWillAppear:animated];



            self.title=@"First";
            [self.navigationController.navigationBar drawRect:CGRectMake(0, 0, 320, 480)];

    }

, если вы хотите использовать Second.png для установки фонового изображения navigationBar в SecondViewController, тогда

в вашем SecondViewController.m

        -(void) viewWillAppear:(BOOL)animated{

        [super viewWillAppear:animated];



            self.title=@"Second";
            [self.navigationController.navigationBar drawRect:CGRectMake(0, 0, 320, 480)];

    }
...