2012-07-01 7 views
0

Я пытаюсь написать настройку мобильного субстрата, чтобы изменить цвет шрифта по умолчанию, используемый приложением в заголовке и кнопках UINavigationBar, , например. Вместо стандартного белого заголовка в Navbar все белые тексты на панели навигации будут красными,UINavigationBar меняет цвет шрифта по умолчанию

Надеюсь, что это имеет смысл.

На данный момент я пытаюсь:

%hood UINavigationBar 
-(void)setTitleView:(id)arg1 { 
    %orig 
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 30)]; 
    titleLabel.textColor = [UIColor redColor] 
} 
%end 

Я чувствую его, потому что я пытаюсь установить новый UILabel вместо замены setTitleView по умолчанию, который вытягивается.

Любая помощь будет принята с благодарностью :)

Заранее спасибо!

ответ

0

В iOS 5+ есть новый способ сделать это, используя протокол UIAppearance. Есть хороший учебник о том, как его использовать. here.

Если вам нужна поддержка IOS 4 до сих пор, вы можете создать подкласс UIViewController и переопределить различные init* метод для установки свойств при создании класса или в viewDidLoad и viewWillAppear и т.д .. Все контроллеры могут затем наследовать от этого вместо UIViewController.

Есть и другие способы сделать это, например добавление методов категорий на UIViewController или swizzling его методы - но я думаю, что это самое простое.

+0

Так я прав, говоря, что в методе viewDidLoad мне нужно переопределить его вызова метода setTitleView в Панель навигации, и вместо того, чтобы указать его (например) '[[UINavigationBar внешний вид] setTitleTextAttributes: UITextAttributeColor, [UIColorWithRed: 0,0 green: 0.0 blue: 0.0 alpha: 1.0]]; ' Если бы я хотел сделать titleText черным – BradStevenson

+0

Вам нужно просто установить атрибуты' appearance' один раз, когда приложение запустится, прежде чем появятся какие-либо представления. Создание собственного суперкласса для контроллеров представлений не требуется, если вы используете класс iOS 5 'UIAppearance'. – jhabbott

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