Пользовательская панель навигации - PullRequest
1 голос
/ 21 февраля 2012

В качестве корня моего приложения у меня есть Navigation Controller, и я использую прокси-сервер внешнего вида для настройки внешнего вида на iOS 5, но для iOS 4 я надеялся использовать категорию для переопределения drawRect :, это было нормально, кромечто все панели навигации были затронуты, как и следовало ожидать от категории.

Я не хочу вмешиваться в «системные» всплывающие окна, такие как Mail composer или SMS composer, я хочу, чтобы их панели оставались синими и системными.

IПопытался создать свой собственный UINavigationController с его xib и изменить класс NavigationBar на мой пользовательский подуровень UINavigationBar.Но результаты никак не влияют на экран.

Мне известно о следующем посте, но я не смог заставить работать какие-либо решения, как ожидалось. Как программно создать подкласс UINavigationBar для UINavigationController?

Моя первая попытка, которая работает, но использует недокументированный setNavigationBar: метод:

_myNavigationController = [[UINavigationController alloc] initWithRootViewController:someVC];

if([[BT_NavigationController class] respondsToSelector:@selector(appearance)]){

    // some iOS 5 magic in here !
    [_myNavigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"topbar.png"];

}else{

    // Probably looking at app store refusal 
    CustomBar * bar = [[CustomBar alloc] init];
    // [_myNavigationController setNavigationBar: bar];
    [bar release];

}

[parentView presentModalViewController:_myNavigationController animated:YES];

Чтобы избежать создания яUINavigationController, для которого у меня также был xib, переназначая класс панели навигации на мой пользовательский класс, но, помещая точки останова в drawRect: метод, я вижу, что это не вызывается.

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

Любые советы будут полезны, спасибо.

1 Ответ

2 голосов
/ 22 февраля 2012

Если ваша модификация только что добавляет изображение, вы можете просто вставить его из контроллеров представления, которые вы хотите настроить:

UIImageView *bgImageView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"topbar.png"]] autorelease];
[self.navigationController.navigationBar addSubview:bgImageView];

Вы должны немного подправить, основываясь на том, какие другие элементы у вас есть в UINavigationBar, чтобы у вашего UIImageView был самый низкий индекс подпредставлений, но все же над фоном. Работал на нас.

Удачи.

...