Пользовательское исключение uinavigatonbar

Я сделал пользовательскую панель навигации следующим образом:

@implementation UINavigationBar (UINavigationBarCategory)

- (void)drawRect:(CGRect)rect {
        UIImage *img = [UIImage imageNamed: @"navigation_background.png"];
        [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

@end

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

Как я могу закодировать это исключение?


person Jorge    schedule 04.01.2011    source источник


Ответы (1)


Я не думаю, что это возможно с категорией UINavigationBar. Я бы предложил подкласс, скажем, CustomNavigationBar

.h

#import <UIKit/UIKit.h>

@interface CustomNavigationBar : UINavigationBar {
}
@end

.m

#import "CustomNavigationBar.h"

@implementation CustomNavigationBar

- (void)drawRect:(CGRect)rect {
        UIImage *img = [UIImage imageNamed: @"navigation_background.png"];
        [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

@end

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

Импортировать

#import <objc/runtime.h>

И в вашем контроллере представления (например, в viewDidLoad) добавьте

object_setClass(self.navigationController.navigationBar, [CustomNavigationBar class]);
person Jilouc    schedule 04.01.2011
comment
Удивительное решение. Работал как шарм. Большое тебе спасибо! - person Jorge; 07.01.2011