2012-02-21 3 views
1

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

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

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

Мне известно следующее сообщение, но не удалось найти какие-либо решения для запуска, как ожидалось. How to subclass UINavigationBar for a UINavigationController programmatically?

Моей первая попытка, которая делает работу, но использует недокументированные 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: я вижу, что это не вызывается.

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

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

ответ

2

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

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

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

Удачи.

+0

Похоже, что когда я установил это для своего контроллера Nav, за ним помещаются заголовки заголовков и штрих-заголовков подробных представлений. – Daniel

+0

yep. вы должны использовать sendSubviewToBack: (или insertSubview: atIndex :) навигационной панели. Это зависит от подзонов вашего навигационного блока. – teriiehina

Смежные вопросы