Criando um botão de seta para a esquerda (como o estilo "voltar" do UINavigationBar) em uma barra do UITool


290

Eu adoraria criar um botão "voltar" no painel da seta esquerda em um UIToolbar.

Até onde eu sei, a única maneira de obter uma dessas UINavigationControlleropções é deixar as configurações padrão e usar uma para o item da barra esquerda. Mas não há como encontrar um para criar um UIBarButtonItem, então não posso fazer um em um padrão UIToolbar, mesmo que sejam muito parecidos com UINavigationBars.

Eu poderia criá-lo manualmente com imagens de botão, mas não consigo encontrar as imagens de origem em nenhum lugar. Eles têm bordas de canal alfa, portanto, captura de tela e corte não terão resultados muito versáteis.

Alguma idéia além da captura de tela para todos os tamanhos e esquemas de cores que pretendo usar?

Atualização: PARE DE evitar a pergunta e sugerir que eu não deveria estar perguntando isso e deveria estar usando UINavigationBar. Meu aplicativo é o Instapaper Pro. Ele mostra apenas uma barra de ferramentas inferior (para economizar espaço e maximizar a área de conteúdo legível) e desejo colocar um botão Voltar em forma de seta esquerda na parte inferior.

Dizer-me que não deveria fazer isso não é uma resposta e certamente não merece uma recompensa.



Respostas:


130

Usei o seguinte psd derivado de http://www.teehanlax.com/blog/?p=447

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

Acabei de criar uma UIView personalizada que uso na propriedade customView do item da barra de ferramentas.

Funciona bem para mim.


Edit: Como apontado por PrairieHippo , maralbjo descobriu que usando o seguinte código simples, o truque (requer imagem personalizada no pacote) deve ser combinado com esta resposta. Então, aqui está um código adicional:

// 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];

1
O PSD que enviei é para uma barra de ferramentas preta. Eu não tentei muito com os azuis, pois meu aplicativo não usa isso. Mas pelo que sei, a barra de ferramentas não a recolorirá conforme necessário. Chris.
PyjamaSam

1
Você não precisa de nenhuma ferramenta especial para colori-la novamente, eu fiz isso usando a opção 'Adjust Color' do Mac Preview.
Sushant

1
Esta solução pode ser explicada um pouco?
cannyboy

4
Este psd é útil apenas para uma escala de tela de 1.0f. Em uma tela de retina, tudo ficará horrível.
Daniel Wood

3
Não use imagens para isso, apenas faça-o corretamente (consulte a resposta para stackoverflow.com/questions/4260238 ).
ingh.am

45

O método Unicode

Eu acho que é muito mais fácil usar apenas um caractere unicode para fazer o trabalho. Você pode examinar as setas pesquisando no triângulo Unicode ou nas setas Unicode . A partir do iOS6, a Apple alterou o caractere para um emoji com uma borda. Para desativar a borda, adiciono o seletor de variação 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;

O bloco de código é apenas para a demonstração. Funcionaria em qualquer botão que aceite um NSString.

Para obter uma lista completa de caracteres, pesquise no Google caracteres Unicode e o que você deseja. Aqui está a entrada para o triângulo preto que aponta para a esquerda .

Resultado

O resultado


37

AVISO: Há relatos de que isso não funcionará no iOS 6. Isso pode funcionar apenas em versões mais antigas do sistema operacional. Evidentemente, pelo menos um desenvolvedor teve seu aplicativo rejeitado por usar esse truque (veja os comentários). Use por sua conta e risco. Usar uma imagem (veja a resposta acima) pode ser uma solução mais segura.

Isso pode ser feito sem adicionar seus próprios arquivos de imagem usando o botão sekr1t tipo 101 para obter a forma correta. Para mim, o truque foi descobrir que eu poderia usar initWithCustomViewpara criar o BarButtonItem. Pessoalmente, eu precisava disso para uma barra de navegação dinâmica, e não para uma toolbar, mas testei-a com uma barra de ferramentas e o código é quase o mesmo:

// 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;

Se você estiver fazendo isso em uma barra de ferramentas, precisará ajustar a maneira como define os itens, mas isso depende do restante do seu código e deixo isso como um exercício para o leitor. : P Este exemplo funcionou para mim (compilado e executado).

Blá, blá, leia o HIG, não use recursos não documentados e tudo mais. Existem apenas seis tipos de botões suportados e este não é um deles.


1
O botão tipo 101 não parece me dar uma forma de apontar para a esquerda ... apenas um retângulo.
elsurudo 11/09/10

10
Não faça isso - seu aplicativo será rejeitado. Vote esta resposta para baixo.
thefaj

4
Estou inclinado a pensar que ele não tem certeza; ele está dizendo "não use API não documentada", mas não informa que seu aplicativo foi rejeitado. E não é uma API não documentada - é um valor não documentado. Se alguém tem tido o seu aplicativo rejeitado, por favor poste. Continuei recebendo aplicativos aprovados com esse valor.
Andrews

1
@thefaj Enviei um aplicativo com este código e ele foi aprovado.
Aaron #

1
Esse é um estilo de codificação muito ruim. Você tem sorte, mas deve usar apenas a API documentada (não números mágicos / não publicados).
thefaj

36

insira a descrição da imagem aqui

Antes de tudo, você precisa encontrar uma imagem do botão Voltar. Eu usei um bom aplicativo chamado Extractor que extrai todos os gráficos do iPhone. No iOS7 , consegui recuperar a imagem chamada UINavigationBarBackIndicatorDefaulte estava na cor preta, pois precisava de uma tonalidade vermelha e alterei a cor para vermelho usando o Gimp.

EDITAR:

Como foi mencionado por btate em seu comentário, não há necessidade de alterar a cor com o editor de imagens. O código a seguir deve fazer o truque:

imageView.tint = [UIColor redColor];
imageView.image = [[UIImage imageNamed:@"UINavigationBarBackIndicatorDefault"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

Em seguida, criei uma visualização que contém um imageView com essa seta, um rótulo com o texto personalizado e, na parte superior da visualização, tenho um botão com uma ação. Então eu adicionei uma animação simples (desbotamento e tradução).

O código a seguir simula o comportamento do botão Voltar, incluindo animação.

-(void)viewWillAppear:(BOOL)animated{
        UIImageView *imageView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"UINavigationBarBackIndicatorDefault"]];
        [imageView setTintColor:[UIColor redColor]];
        UILabel *label=[[UILabel alloc] init];
        [label setTextColor:[UIColor redColor]];
        [label setText:@"Blog"];
        [label sizeToFit];

        int space=6;
        label.frame=CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+space, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
        UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, label.frame.size.width+imageView.frame.size.width+space, imageView.frame.size.height)];

        view.bounds=CGRectMake(view.bounds.origin.x+8, view.bounds.origin.y-1, view.bounds.size.width, view.bounds.size.height);
        [view addSubview:imageView];
        [view addSubview:label];

        UIButton *button=[[UIButton alloc] initWithFrame:view.frame];
        [button addTarget:self action:@selector(handleBack:) forControlEvents:UIControlEventTouchUpInside];
        [view addSubview:button];

        [UIView animateWithDuration:0.33 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
            label.alpha = 0.0;
            CGRect orig=label.frame;
            label.frame=CGRectMake(label.frame.origin.x+25, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
            label.alpha = 1.0;
            label.frame=orig;
        } completion:nil];

        UIBarButtonItem *backButton =[[UIBarButtonItem alloc] initWithCustomView:view];
}

- (void) handleBack:(id)sender{
}

EDITAR:

Em vez de adicionar o botão, na minha opinião, a melhor abordagem é usar um reconhecedor de gestos.

UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleBack:)];
[view addGestureRecognizer:tap];
[view setUserInteractionEnabled:YES];

1
Oi Alex, Obrigado pela solução. Um problema que estou enfrentando com essa solução implementada é: A área de acerto é menor quando clico na seta, o handleBack não recebe chamadas, mas quando clico na chamada de texto handleBack get. Por favor, sugira isso. Obrigado
Yogesh Lolusare

Tente usar UITapGestureRecognizer eu editei a pergunta
Alexey

Provavelmente, você também pode tentar aumentar o tamanho da visualização.
Alexey28 de

2
A cor preta neste botão o torna um modelo. Você não precisa usar o gimp para alterá-lo. Basta usar o imageView.tint = [UIColor redColor]modo de renderização de tonalidade e modelo na imagem. imageView.image = [yourImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
smokingoyster

18

Não tenho certeza se isso funcionaria, mas você pode tentar criar um UINavigationControllercom as configurações padrão para criar o botão, encontrar o botão na hierarquia de subvisões do controlador de navegação, chamá removeFromSuperview-lo, destruir o controlador de navegação e adicionar o botão como uma subvisão da sua barra de ferramentas. Você também pode precisar retaine o botão antes de ligar removeFromSuperview(e releasedepois adicioná-lo como subview da barra de ferramentas) para evitar que seja desalocado durante o processo.


14

Para fazer um UIButton com uma seta bem próximo (não sou designer;) da seta para trás do sistema iOS 7:

Padrão:

Seta traseira do sistema padrão

Apple SD Gothic Neo

Apple SD Gothic Neo <personagem

No Xcode:

  • Concentre-se no campo de valor do título do botão (ou em qualquer outra visualização / controle com conteúdo de texto)
  • Abrir Edição -> Caracteres Especiais
  • Selecione o grupo Parênteses e clique duas vezes no caractere '<'
  • Altere a fonte para: Apple SD Gothic Neo, Regular com o tamanho desejado (por exemplo, 20)
  • Mude a cor como quiser

Ref da resposta de staticVoidMan da seta Back-like no iOS 7


8

seta para trás

Se você não quiser se preocupar com arquivos de imagem, a forma da seta pode ser desenhada em uma subclasse UIView com o seguinte código:

- (void)drawRect:(CGRect)rect {
    float width = rect.size.width;
    float height = rect.size.height;
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextBeginPath(context);
    CGContextMoveToPoint(context, width * 5.0/6.0, height * 0.0/10.0);
    CGContextAddLineToPoint(context, width * 0.0/6.0, height * 5.0/10.0);
    CGContextAddLineToPoint(context, width * 5.0/6.0, height * 10.0/10.0);
    CGContextAddLineToPoint(context, width * 6.0/6.0, height * 9.0/10.0);
    CGContextAddLineToPoint(context, width * 2.0/6.0, height * 5.0/10.0);
    CGContextAddLineToPoint(context, width * 6.0/6.0, height * 1.0/10.0);
    CGContextClosePath(context);

    CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextFillPath(context);
}

onde a vista em seta é proporcional a uma largura de 6,0 e uma altura de 10,0


7
    self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;

Funciona para mim. Eu usei isso quando eu tinha mais guias, então poderia caber na barra de guias, e um controlador de exibição pressionado a partir do "Mais" substituiu o leftBarButtonItem em seu viewDidLoad.


4

Você pode encontrar as imagens de origem extraindo-as de Other.artwork no UIKit $ {SDKROOT} /System/Library/Frameworks/UIKit.framework/Other.artwork. A comunidade modding tem algumas ferramentas para extraí-las, aqui . Depois de extrair a imagem, você pode escrever um código para recolori-lo conforme necessário e defini-lo como a imagem do botão. Se você pode ou não enviar uma coisa dessas (já que está incorporando obras de arte derivadas) pode ser um pouco arriscado, então talvez você queira conversar com um advogado.


4

A biblioteca Three20 tem uma maneira de fazer isso:

  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;

Você pode postar uma captura de tela do resultado final?
jm.

1
parecia terrível. Nunca o botão de seta para a esquerda para trás parece direito. Desisti e usei um botão Voltar adequado com o navegador Three20.
Andrew Arrow

4

Eu descobri que usando o código simples a seguir, o truque (requer imagem personalizada no pacote):

// 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];

2
Para quem vem a esta página, combine esta resposta com a resposta de @ PyjamaSam.
PrairieHippo

@PrairieHippo: Foi feito agora. Provavelmente deveria ter sido editado em primeiro lugar. Ideal -1 para não fazer isso em primeiro lugar, deixando o trabalho para os outros.
hakre

4

Eis o que acabei fazendo depois de pesquisar em todas essas soluções e outras. Ele usa pngs extensíveis extraídos das imagens de ações do UIKit. Dessa forma, você pode definir o texto como preferir

// Generate the background images
UIImage *stretchableBackButton = [[UIImage imageNamed:@"UINavigationBarDefaultBack.png"] stretchableImageWithLeftCapWidth:14 topCapHeight:0];
UIImage *stretchableBackButtonPressed = [[UIImage imageNamed:@"UINavigationBarDefaultBackPressed.png"] stretchableImageWithLeftCapWidth:13 topCapHeight:0];
// Setup the UIButton
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setBackgroundImage:stretchableBackButton forState:UIControlStateNormal];
[backButton setBackgroundImage:stretchableBackButtonPressed forState:UIControlStateSelected];
NSString *buttonTitle = NSLocalizedString(@"Back", @"Back");
[backButton setTitle:buttonTitle forState:UIControlStateNormal];
[backButton setTitle:buttonTitle forState:UIControlStateSelected];
backButton.titleEdgeInsets = UIEdgeInsetsMake(0, 5, 2, 1); // Tweak the text position
NSInteger width = ([backButton.titleLabel.text sizeWithFont:backButton.titleLabel.font].width + backButton.titleEdgeInsets.right +backButton.titleEdgeInsets.left);
[backButton setFrame:CGRectMake(0, 0, width, 29)];
backButton.titleLabel.font = [UIFont boldSystemFontOfSize:13.0f];
[backButton addTarget:self action:@selector(yourSelector:) forControlEvents:UIControlEventTouchDown];
// Now add the button as a custom UIBarButtonItem
UIBarButtonItem *backButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:backButton] autorelease];
self.navigationItem.leftBarButtonItem = backButtonItem;

2
Deve usar UIControlStateHighlighted e não UIControlStateSelected, caso contrário, a imagem será trocada quando o botão for tocado.
23712 Jim

4

É fácil fazer isso com o Interface Builder no Xcode 5.x

Resultado

  • usar barra de ferramentas e item de botão de barra da biblioteca de objetos

    Componentes

  • Inspetor de Atributos do botão editar seção Imagem com a imagem do botão Voltar

    Inspetor de atributos

Feito!


2

Eu estava tentando fazer a mesma coisa, mas queria que o botão Voltar estivesse na barra de navegação. (Na verdade, eu precisava de um botão Voltar, que faria mais do que apenas voltar, então tive que usar a propriedade leftBarButtonItem). Eu tentei o que o AndrewS sugeriu, mas na barra de navegação não teria a aparência que deveria, pois o UIButton era meio que convertido para um UIBarButtonItem.

Mas eu encontrei uma maneira de contornar isso. Na verdade, basta colocar uma UIView sob o UIButton e definir o customView para o UIBarButtonItem. Aqui está o código, se alguém precisar:

// initialize button and button view
UIButton *backButton = [UIButton buttonWithType:101];
UIView *backButtonView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, backButton.frame.size.width, backButton.frame.size.height)];

[backButton addTarget:self action:@selector(backButtonTouched:) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Back" forState:UIControlStateNormal];
[backButtonView addSubview:backButton];

// set buttonview as custom view for bar button item
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButtonView];
self.navigationItem.leftBarButtonItem = backButtonItem;

// push item to navigationbar items
[self.navigationController.navigationBar setItems:[NSArray arrayWithObject:backButtonItem]];

1

Para criar uma imagem para a barra UITool, faça um png no photoshop e ONDE SEMPRE ALGUMA cor, ela a coloca em branco e, onde é alfa = 0, deixa-a em paz.

Na verdade, o SDK coloca a borda ao redor do ícone que você criou e o torna branco sem que você precise fazer nada.

Veja, foi o que fiz no Photoshop para o meu botão de avanço (obviamente troque-o pelo botão de retorno):

http://twitpic.com/1oanv

e foi assim que apareceu no Interface Builder

http://twitpic.com/1oaoa


1

Solução SEM usar um png. Com base nesta resposta SO: Adicionando a pequena seta ao lado direito de uma célula em uma célula do iPhone TableView

Basta virar o UITableViewCell horizontalmente!

UIButton *btnBack = [[UIButton alloc] initWithFrame:CGRectMake(0, 5, 70, 20)];

// Add the disclosure
CGRect frm;
UITableViewCell *disclosure = [[UITableViewCell alloc] init];
disclosure.transform = CGAffineTransformScale(CGAffineTransformIdentity, -1, 1);
frm = self.btnBack.bounds;
disclosure.frame = CGRectMake(frm.origin.x, frm.origin.y, frm.size.width-25, frm.size.height);
disclosure.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
disclosure.userInteractionEnabled = NO;
[self.btnBack addSubview:disclosure];

// Add the label
UILabel *lbl = [[UILabel alloc] init];
frm = CGRectOffset(self.btnBack.bounds, 15, 0);
lbl.frame = frm;
lbl.textAlignment = NSTextAlignmentCenter;
lbl.text = @"BACK";
[self addSubview:lbl];

1

Swift 5.2 Xcode 11.4

O símbolo Apple chevron.left agora permite uma solução mais elegante para criar um botão personalizado. Combinei o tamanho e o espaçamento o mais próximo possível.

insira a descrição da imagem aqui

import UIKit

class CustomBackButton: UIBarButtonItem {

    convenience init(target: Any, selector: Selector) {

        // Create UIButton
        let button = UIButton(frame: .zero)

        // Customise Title
        button.setTitle("Back", for: .normal)
        button.setTitleColor(.systemBlue, for: .normal)
        button.titleLabel?.font = UIFont.systemFont(ofSize: 17)

        // Customise Image
        let config = UIImage.SymbolConfiguration(pointSize: 19.0, weight: .semibold, scale: .large)
        let image = UIImage(systemName: "chevron.left", withConfiguration: config)
        button.setImage(image, for: .normal)

        // Add Target
        button.addTarget(target, action: selector, for: .touchUpInside)

        // Customise Spacing to match system Back button
        button.imageEdgeInsets = UIEdgeInsets(top: 0.0, left: -18.0, bottom: 0.0, right: 0.0)
        button.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: -12.0, bottom: 0.0, right: 0.0)

        self.init(customView: button)
    }
}

Isso pode ser implementado como um UIToolbarItem, ou umUINavigationItem

override func viewDidLoad() {
    super.viewDidLoad()

    // UIToolbar Item
    let barBackButton = CustomBackButton(target: self, selector: #selector(backButtonTapped))
    let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    navigationController?.setToolbarHidden(false, animated: false)
    toolbarItems = [barBackButton, flexSpace]

    // Navigation Item
    let navBackButton = CustomBackButton(target: self, selector: #selector(backButtonTapped))
    navigationItem.leftBarButtonItem = navBackButton
}

@objc func backButtonTapped() {
    print("Back tapped")
}

Se você deseja apertar o botão e ter a seta apontando para a direita:

insira a descrição da imagem aqui

Use o símbolo da Apple chamado "chevron.right"

Adicione o seguinte código à CustomBackButtonclasse:

    // Put the image of the right side of the button
    button.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
    button.titleLabel?.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
    button.imageView?.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)

0

Se você quiser evitar desenhá-lo você mesmo, poderá usar a classe não documentada: UINavigationButton com estilo 1. Isso pode, é claro, impedir que seu aplicativo seja aprovado ... / John


0

Bem, você não precisa ter um botão diferente para cada tamanho, pode usar [UIImage stretchableImageWithLeftCapWidth:topCapHeight:], mas a única coisa que encontrei foram as imagens personalizadas.


0

Eu tive um problema semelhante e saí de uma biblioteca PButton . E a amostra é o botão de navegação traseira como botão, que pode ser usado em qualquer lugar, como um botão personalizado.

Algo assim: insira a descrição da imagem aqui


0

Exemplo no Swift 3, com um botão anterior e um próximo no canto superior direito.

let prevButtonItem = UIBarButtonItem(title: "\u{25C0}", style: .plain, target: self, action: #selector(prevButtonTapped))
let nextButtonItem = UIBarButtonItem(title: "\u{25B6}", style: .plain, target: self, action: #selector(nextButtonTapped))
self.navigationItem.rightBarButtonItems = [nextButtonItem, prevButtonItem]

0

Rápido

// create button
    var backButton = UIButton(type: 101)

    // left-pointing shape!
    backButton.addTarget(self, action: #selector(self.backAction), for: .touchUpInside)
    backButton.setTitle("Back", for: .normal)

    // create button item -- possible because UIButton subclasses UIView!
    var backItem = UIBarButtonItem(customView: backButton)

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

-5

Tente isso. Tenho certeza de que você não precisa de uma imagem do botão Voltar para criar uma dessas.

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(yourSelectorGoesHere:)];
self.navigationItem.backBarButtonItem = backButton;

É tudo o que você precisa fazer :)


-23

Por que você está fazendo isso? Se você deseja algo parecido com uma barra de navegação, use UINavigationBar.

As barras de ferramentas têm um estilo visual específico associado a elas. As diretrizes da interface humana para o iPhone declaram:

Uma barra de ferramentas aparece na borda inferior da tela e contém botões que executam ações relacionadas a objetos na exibição atual.

Em seguida, fornece vários exemplos visuais de ícones aproximadamente quadrados sem texto. Exorto-vos a seguir o HIG sobre isso.


8
Estou ciente disso, obrigado. No entanto, acredito que meu uso pretendido é apropriado. Você pode ser mais útil, supondo que eu realmente queira fazer o que pedi?
23008 Marco

Se você está colocando na parte superior da tela, está sendo usado errado. Compare os gradientes e as bordas entre a UINavigationBar e a UIToolbar e você verá que elas são ligeiramente diferentes. Você definitivamente deseja usar uma UINavigationBar na parte superior da tela.
NilObject 22/02/09

10
Estou colocando no fundo.
22009 Marco
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.