UINavigationBar изменить цвет оттенка в категории - PullRequest
1 голос
/ 16 февраля 2012

Я знаю, что могу легко изменить цвет оттенка навигационной панели в xib-файле.Но проблема в том, что если мне нужно изменить во многих местах.

Поэтому я попытался использовать категорию (fancy) и переопределить метод draw rect.

#import "UINavigationBar+customTint.h"

@implementation UINavigationBar (customTint)

-(void)drawRect:(CGRect)rect{
    self.tintColor = [UIColor redColor];
}

@end

Я также импортировал его в соответствующий контроллер представления.Что я делаю неправильно?Как правильно это сделать?

Спасибо заранее

Ответы [ 2 ]

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

Если вы используете iOS5, то правильный способ сделать это - использовать прокси UIAppearance.

[[UINavigationBar appearance] setTintColor:myColor];

Подробности здесь: https://developer.apple.com/library/ios/#documentation/uikit/reference/UIAppearance_Protocol/Reference/Reference.html

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

Это один из способов сделать это.Возможно, вам просто будет проще ViewController, если вам когда-нибудь понадобится изменить его, добавьте строку:

self.navigationController.navigationBar.tintColor = [UIColor redColor];

Использование категории для одной строки, вероятно, излишне.

РЕДАКТИРОВАТЬ:Если вы хотите использовать категорию, вам может потребоваться позвонить setNeedsDisplay на панели навигации.или переопределить другой метод и вызвать его.Примерно так:

[self.navigationController.navigationBar setNeedsDisplay];

Также согласно документации Apple

В iOS 5 реализации UINavigationBar, UIToolbar и UITabBar изменились, так что drawRect: метод не вызывается, если он не реализован в подклассе.Приложения, которые повторно реализовали drawRect: в категории любого из этих классов, обнаружат, что метод drawRect: не вызывается.UIKit выполняет проверку ссылок, чтобы не вызывать метод в приложениях, связанных до iOS 5, но не поддерживает этот дизайн в iOS 5 или более поздней версии.Приложения могут либо:

  • Использовать API настройки для баров в iOS 5 и новее, что является предпочтительным способом.
  • Подкласс UINavigationBar (или другие классы баров) и переопределить drawRect:в подклассе.

Поэтому лучший способ сделать это - поместить это в ваш ApplicationDidFinishLaunching

NSString *reqSysVer = @"5.0";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)
  [[UINavigationBar appearance] setTintColor:myColor];

, а также оставить свой DrawRect, чтобы на iOS он работал меньше 5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...