Создание кнопки стрелки влево (как стиль “спины” UINavigationBar) на UIToolbar

290
задан Bali 12 July 2017 в 23:35
поделиться

10 ответов

Я использовал следующий psd, который я получил от http://www.teehanlax.com/blog/?p=447

http://www.chrisandtennille.com/pictures/backbutton.psd

, я затем просто создал пользовательский UIView, который я использую в customView свойстве объекта панели инструментов.

Работы хорошо для меня.

<час>

Редактирование: , Как указано PrairieHippo, maralbjo нашел, что использование следующего, простого кода добилось цели (требует пользовательского изображения в пакете), должен быть объединен с этим ответом. Таким образом, вот дополнительный код:

// Creates a back button instead of default behaviour (displaying title of previous screen)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow.png"]
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(backAction)];

tipsDetailViewController.navigationItem.leftBarButtonItem = backButton;
[backButton release];
129
ответ дан Community 23 November 2019 в 01:43
поделиться

Почему Вы делаете это? Если Вы хотите что-то, что похоже на панель навигации, используйте UINavigationBar.

Панели инструментов имеют определенный визуальный стиль, связанный с ними. Инструкции по Интерфейсу пользователя для состояния iPhone:

панель инструментов А появляется на нижнем краю экрана и содержит кнопки, которые выполняют действия, связанные с объектами в текущем представлении.

Это тогда дает несколько визуальных примеров примерно квадратных значков без текста. Я убедил бы Вас следовать за HIG на этом.

-23
ответ дан Colin Barrett 23 November 2019 в 01:43
поделиться

Ну, у Вас не должно быть различной кнопки для каждого размера, можно использовать [UIImage stretchableImageWithLeftCapWidth:topCapHeight:], но единственной вещью, которую я нашел, являются пользовательские изображения.

0
ответ дан logancautrell 23 November 2019 в 01:43
поделиться

Если Вы не хотите тянуть его сами, Вы могли бы использовать недокументированный класс: UINavigationButton со стилем 1. Это могло, конечно, мешать Вашему приложению быть утвержденным.../John

0
ответ дан John Lane 23 November 2019 в 01:43
поделиться

Для создания изображения для UIToolbar сделайте png в фотошопе и ГДЕ КОГДА-ЛИБО существует ЛЮБОЙ цвет, это помещает его белый, и где это - альфа = 0 тогда, это оставляет его в покое.

SDK на самом деле put's граница вокруг значка Вы сделали, и поворачивает его белый без Вас имеющий необходимость сделать что-либо.

Видят, это - то, что я сделал в Photoshop для моего вперед кнопкой (очевидно, подкачивают его вокруг для кнопки "Назад"):

http://twitpic.com/1oanv

и это - то, как что это появилось в Интерфейсном Разработчике

http://twitpic.com/1oaoa

1
ответ дан Domness 23 November 2019 в 01:43
поделиться

Можно найти исходные изображения путем извлечения их из Other.artwork в $ UIKit {SDKROOT}/System/Library/Frameworks/UIKit.framework/Other.artwork. У сообщества модификации есть некоторые инструменты для извлечения их, здесь . После того как Вы извлекаете изображение, можно написать некоторый код, чтобы повторно окрасить его по мере необходимости и установить его как изображение кнопки. Можно ли на самом деле поставить такую вещь (так как Вы встраиваете полученные иллюстрации), могло бы быть немного рискованным, поэтому возможно, Вы хотите говорить с адвокатом.

4
ответ дан Louis Gerbarg 23 November 2019 в 01:43
поделиться

Я не уверен, работало ли это, но Вы могли бы попытаться создать UINavigationController с настройками по умолчанию, чтобы создать кнопку, найти кнопку в иерархии подпредставления контроллера навигации, звонить removeFromSuperview на нем, уничтожить контроллер навигации и затем добавить кнопку как подпредставление Вашей панели инструментов. Вам, возможно, также понадобится к retain и кнопка прежде, чем звонить removeFromSuperview (и затем release это после добавления его как подпредставление Вашей панели инструментов) для предотвращения его освобождаемый во время процесса.

18
ответ дан Adam Rosenfield 23 November 2019 в 01:43
поделиться

В библиотеке Three20 есть способ сделать это:

  UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle: @"Title" style:UIBarButtonItemStylePlain 
                                                                target:self action:@selector(foo)];

  UIColor* darkBlue = RGBCOLOR(109, 132, 162);

  TTShapeStyle* style = [TTShapeStyle styleWithShape:[TTRoundedLeftArrowShape shapeWithRadius:4.5] next:
    [TTShadowStyle styleWithColor:RGBCOLOR(255,255,255) blur:1 offset:CGSizeMake(0, 1) next:
    [TTReflectiveFillStyle styleWithColor:darkBlue next:
    [TTBevelBorderStyle styleWithHighlight:[darkBlue shadow]
                                     shadow:[darkBlue multiplyHue:1 saturation:0.5 value:0.5]
                                      width:1 lightSource:270 next:
    [TTInsetStyle styleWithInset:UIEdgeInsetsMake(0, -1, 0, -1) next:
    [TTBevelBorderStyle styleWithHighlight:nil shadow:RGBACOLOR(0,0,0,0.15)
                                        width:1 lightSource:270 next:nil]]]]]];

  TTView* view = [[[TTView alloc] initWithFrame:CGRectMake(0, 0, 80, 35)] autorelease];
  view.backgroundColor = [UIColor clearColor];
  view.style = style;
  backButton.customView = view;


  self.navigationItem.leftBarButtonItem = backButton;
4
ответ дан 23 November 2019 в 01:43
поделиться

Метод Unicode

Я думаю, что намного проще просто использовать символ Unicode для выполнения работы. Чтобы просмотреть стрелки, введите в Google Треугольники Юникода или Стрелки Юникода . Начиная с iOS6, Apple изменила персонажа на эмодзи с рамкой. Чтобы отключить границу, я добавляю селектор вариантов Unicode 0xFE0E .

NSString *backArrowString = @"\U000025C0\U0000FE0E"; //BLACK LEFT-POINTING TRIANGLE PLUS VARIATION SELECTOR

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:backArrowString style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.leftButtonItem = backBarButtonItem;

Блок кода предназначен только для демонстрации. Он будет работать с любой кнопкой, которая принимает NSString.

Чтобы получить полный список символов, выполните поиск в Google по символу Unicode и тому, что вы хотите. Вот запись для Черный треугольник, указывающий влево .

Результат

The result

46
ответ дан 23 November 2019 в 01:43
поделиться

ПРЕДУПРЕЖДЕНИЕ: Есть сообщения, что это не будет работать на iOS 6. Это может работать только на более старых версиях ОС. Очевидно, что по крайней мере один разработчик отклонил свое приложение за использование этого трюка (см. комментарии). Используйте на свой страх и риск. Использование изображения (см. ответ выше) может быть более безопасным решением.

Это можно сделать без добавления собственных файлов изображений с помощью кнопки sekr1t типа 101 для получения правильной формы. Для меня трюк заключался в том, чтобы выяснить, что я могу использовать initWithCustomView для создания BarButtonItem. Лично мне это было нужно для динамической панели навигации, а не для toolbar, но я протестировал ее с панелью инструментов, и код почти такой же:

// create button
UIButton* backButton = [UIButton buttonWithType:101]; // left-pointing shape!
[backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Back" forState:UIControlStateNormal];

// create button item -- possible because UIButton subclasses UIView!
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];

// add to toolbar, or to a navbar (you should only have one of these!)
[toolbar setItems:[NSArray arrayWithObject:backItem]];
navItem.leftBarButtonItem = backItem;

Если вы делаете это на панели инструментов, вам придется настроить, как вы устанавливаете элементы, но это зависит от остальной части вашего кода, и я оставляю это как упражнение для читателя. :P Этот пример сработал для меня (скомпилирован и запущен).

Бла-бла-бла, прочитайте HIG, не используйте недокументированные функции и все такое. Есть только шесть поддерживаемых типов кнопок, и это не один из них.

37
ответ дан 23 November 2019 в 01:43
поделиться