Несколько пользовательских фонов для UIToolbar - PullRequest
2 голосов
/ 22 февраля 2011

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

Моя проблема в том, что я уже использую это как панель инструментов для веб-просмотра, и здесь с другим фоновым изображением, чем мне нужно сейчас.

Заменив функцию drawRect в UIToolbar + добавление. У меня есть глобальная панель инструментов для этого, которая отлично работает в моих веб-обзорах.

Как мне расширить это, чтобы я мог выбрать, какую версию (фон) использовать в разных местах?

Мой UIToolbar + добавление. M:

#import "UINavigationBar+addition.h"

@implementation UIToolbar (Addition)
- (void) drawRect:(CGRect)rect {
    UIImage *barImage = [UIImage imageNamed:@"toolbar-bg.png"];
    [barImage drawInRect:rect];
}
@end

Ответы [ 2 ]

0 голосов
/ 01 марта 2012

Почему бы просто не добавить свойство barImage к вашему расширению?

@interface UIToolbar (Addition)

@property (nonatomic, retain) UIImage *barImage;

@end

Затем, в вашей реализации (я делаю это, предполагая, что вы не используете ARC. Если вы используете, очевидно, удалите материал сохранения / выпуска):

@implementation UIToolbar (Addition)

@synthesize barImage = _barImage;

//Override barImage setter to force redraw if property set after already added to superView...
- (void)setBarImage:(UIImage *)barImage {
    if (_barImage != barImage) {
        UIImage *oldBarImage = [_barImage retain];
        _barImage = [barImage retain];
        [oldBarImage release];

        //Let this UIToolbar instance know it needs to be redrawn in case you set/change the barImage property after already added to a superView...
        [self setNeedsDisplay];
    }
}    

- (void) drawRect:(CGRect)rect {
    [self.barImage drawInRect:rect];
}

//If you're not using ARC...
- (void)dealloc {
    [barImage release];
    [super dealloc];
}

@end

Теперь все, что вам нужно сделать, это установить свойство barImage после создания экземпляра UIToobar. e.g.:

UIToolBar *myToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; //Or whatever frame you want...
myToolbar.barImage = [UIImage imageNamed:@"toolbar-bg.png"];
[self.view addSubView:myToolbar];
[myToolbar release];

И, если вы хотите изменить его после того, как оно уже появилось на экране, вы можете сделать это, просто установив для свойства barImage новый UIImage.

Похоже, это был год с тех пор, как этот вопрос был опубликован, но, надеюсь, это может кому-то помочь.

0 голосов
/ 10 декабря 2011

Попробуйте создать отдельные файлы .h и .m для каждой «версии» и импортируйте соответствующий файл .h в файл класса, на который вы хотите повлиять.

...