Как изменить цвет текста на кнопках UINavigationBar - PullRequest
18 голосов
/ 03 февраля 2009

У меня есть UINavigationController, и я изменил его на белый, используя свойство Tint панели навигации в Interface Builder. Но текст в кнопках и заголовке по-прежнему является цветом по умолчанию, белым, и поэтому теряется на белом фоне. Кто-нибудь знает, как обойти это?

Ответы [ 8 ]

31 голосов
/ 12 апреля 2012

Начиная с iOS 5, это намного проще, используя внешний прокси UIBarButtonItem:

 NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: 
                        [UIColor blackColor], 
                        UITextAttributeTextColor, 
                        [UIColor clearColor], 
                        UITextAttributeTextShadowColor, nil];

[[UIBarButtonItem appearance] setTitleTextAttributes: attributes
                                            forState: UIControlStateNormal];

Установите это в приложении: didFinishLaunchingWithOptions:

11 голосов
/ 31 марта 2010
for (id subView in theNavigationBar.subviews) {
    if ([subView isKindOfClass:[UIButton class]]) {
        [(UIButton *)subView setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [(UIButton *)subView setTitleShadowColor:[UIColor clearColor] forState:UIControlStateNormal];
    }

}
8 голосов
/ 26 марта 2009

Вот один из способов:

[[theNavigationBar.subviews objectAtIndex:1] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[[theNavigationBar.subviews objectAtIndex:2] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

Впрочем, ОГРОМНО, будьте осторожны. С большой вероятностью это может сломаться в будущем выпуске ОС и не рекомендуется.

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

2 голосов
/ 26 марта 2009

Я сделал так, как предложил drunknbass. Я прибег к созданию серии изображений для кнопки «Назад» в нескольких состояниях и обычных кнопок в нескольких состояниях и помещаю их в пользовательский подкласс UIButton, настраивая соответствующие стили.

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

В связанной заметке, если вы измените цвет оттенка панели навигации, он не будет хорошо работать со специальным контроллером вида «Дополнительно» для настройки порядка панели вкладок. Похоже, не существует «приемлемого» способа изменить цвет панели инструментов в этом представлении.

2 голосов
/ 26 марта 2009

Или вы используете свой собственный подкласс элементов панели кнопок с указанным вами установщиком, только если это не iPhone OS 3, вы можете выставить цвет текста для КАЖДОЙ кнопки

1 голос
/ 26 марта 2009

Не можете ли вы перебрать содержимое представления UINavigationBar, чтобы найти кнопки в awakeFromNib?

0 голосов
/ 30 апреля 2013

Вы можете изменить внешний вид заголовка, добавив метку в панель навигации, как показано ниже.

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 35)];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = UITextAlignmentCenter;
label.textColor =[UIColor whiteColor];
label.text=self.title;
self.navigationItem.titleView = viewLabel;
[label release]; 
0 голосов
/ 15 марта 2010

Здесь ясный способ (опираясь на общедоступный API) сделать это ИМХО: вы должны использовать свойство titleView navigationItem, чтобы применить свой собственный UILabel, для которого вы будете настраивать textColor* 1005. *


UILabel* lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
lbl.textAlignment=UITextAlignmentCenter;
lbl.backgroundColor=[UIColor clearColor];
lbl.textColor=[UIColor colorWithRed:0.18 green:0.2 blue:0.56 alpha:1];
theControllerOnWhichYouWantToHaveATitleWithYourOwnColor.navigationItem.titleView=lbl;
[lbl release];

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