Как настроить цвет текста кнопки "Назад" в представлении заголовка UINavigationController?

Я использую пользовательский 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]];
 *************** *temporaryBarButtonItem=[[*************** alloc] initWithCustomView:backLabel];
 temporaryBarButtonItem.customView = backLabel;
 [backLabel release];
 self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
 [temporaryBarButtonItem release];]

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

5 ответов

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

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

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


Это работает, решает исходный вопрос (смените кнопку Navbar BACK - и никаких кнопок на других панелях инструментов, никаких кнопок на вкладках и т.д.):

[[*************** appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor blackColor], UITextAttributeTextColor,nil]
 forState:UIControlStateNormal];


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

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

*************** * backItem = [[*************** alloc] initWithImage:backImage style:***************StylePlain target:nil action:nil];
navItem.backBarButtonItem = backItem;
[backItem release];


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


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

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

licensed under cc by-sa 3.0 with attribution.