Как я могу настроить цвет текста кнопки «Назад» в представлении заголовка UINavigationController? - PullRequest
13 голосов
/ 28 ноября 2008

Я использую пользовательский tintColor на панели навигации моего UINavigationController, и, поскольку цвет настолько светлый, мне нужно использовать текст темного цвета. Относительно легко поменять представление заголовка и пользовательские кнопки, которые я добавил с правой стороны, но я не могу заставить пользовательский вид придерживаться кнопки «Назад». Вот что я сейчас пытаюсь:

    UILabel *backLabel = [[UILabel alloc] initWithFrame:CGRectZero];

    [backLabel setFont:[UIFont fontWithName:[[UIFont fontNamesForFamilyName:@"Arial Rounded MT Bold"] objectAtIndex:0] size:24.0]];
    [backLabel setTextColor:[UIColor blackColor]];
    [backLabel setShadowColor:[UIColor clearColor]];

    [backLabel setText:[aCategory displayName]];
    [backLabel sizeToFit];
    [backLabel setBackgroundColor:[UIColor clearColor]];

    UIBarButtonItem *temporaryBarButtonItem=[[UIBarButtonItem alloc] initWithCustomView:backLabel];

    temporaryBarButtonItem.customView = backLabel;
    [backLabel release];

    self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
    [temporaryBarButtonItem release];]

Тем не менее, пользовательский вид не прилипает, и я не вижу очевидного простого способа получить фактический текст внутри кнопки по умолчанию и начать изменять ее стиль.

Ответы [ 5 ]

38 голосов
/ 10 мая 2012

Это работает, решает исходный вопрос (измените кнопку НАЗАД на панели навигации - и никаких кнопок на других панелях инструментов, никаких кнопок на панелях вкладок и т. Д.):

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor blackColor], UITextAttributeTextColor,nil]
         forState:UIControlStateNormal];
6 голосов
/ 28 ноября 2008

Нет официального способа сделать это. Два метода, о которых я мог подумать:

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

  • создайте свою собственную кнопку «назад» (т. Е. Со своим изображением) и установите ее цвет. Это то, что мы делаем во многих местах. Это немного больше работы, но результаты именно то, что вы хотите.

4 голосов
/ 22 января 2010

Я попытался обойти, чтобы установить текст, но он заканчивается UINavigationItemButtonView, который, кажется, просто рисует напрямую. Нет возможности установить цвет.

Единственный способ заставить его работать - это преобразовать текст в изображение, а затем установить кнопку «Назад» для изображения.

UIBarButtonItem * backItem = [[UIBarButtonItem alloc] initWithImage:backImage style:UIBarButtonItemStylePlain target:nil action:nil];
navItem.backBarButtonItem = backItem;
[backItem release];
1 голос
/ 04 ноября 2010

СкотчВ правильно. В предыдущих версиях SDK они использовали отдельные экземпляры UIButton, что позволяло выполнять настройку путем обхода иерархии подпредставлений. Это больше невозможно.

0 голосов
/ 28 декабря 2011

@ DrMickeyLauer Итерация иерархии для установки цвета текста возможна в моей среде разработки.
Когда вы заполняете свои UINavigationBar's левый и правый виды, ваш UINavigationBar будет иметь UIButtons в качестве подпредставлений. Если вам нравятся UIToolbars и родительские элементы на панели навигации, вы можете перебирать свои navBar.items, проверяя UINavigationItems (через isKindOfClass:). Эти элементы навигации имеют массивы левого и правого элементов. Эти массивы содержат (помимо прочего) панели инструментов, которые вы вставили в левую и правую панели навигации. Эти левый и правый массивы дают вам доступ к UIBarButtonItems панели инструментов. Затем вы можете позвонить setTitleTextAttributes на UIBarButtonItems, чтобы установить их цвет текста и тени.

Но, как заявил Бен Готлиб, это хрупкий подход. Это заставляет задуматься, изменится ли организация навигационной панели в будущем.

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