Пользовательское исключение uinavigatonbar - PullRequest
2 голосов
/ 04 января 2011

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

@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

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

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

1 Ответ

2 голосов
/ 04 января 2011

Я не думаю, что это возможно с категорией на 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]);
...