ios - bar - ui navigation item




Removendo o texto do título de um UIBarButtonItem do iOS (20)

Ocultar o título do botão Voltar da barra de navegação

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @""; // blank or any other title
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

O que eu queria fazer é remover o texto do botão 'Voltar' de um UIBarButtonItem , deixando apenas a UIBarButtonItem azul na barra de navegação. Tenha em mente que estou desenvolvendo para o iOS 7. Já experimentei vários métodos, incluindo, mas não limitados a:

Este é o método de imagem que eu não gostei (a imagem parecia fora do lugar):

UIBarButtonItem *barBtnItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"iOS7BackButton"] style:UIBarButtonItemStylePlain target:self action:@selector(goToPrevious:)];
self.navigationItem.leftBarButtonItem = barBtnItem;

Outro método que eu tentei foi isso, que simplesmente não funcionou (nada foi exibido):

UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]init];
barBtn.title[email protected]"";
self.navigationItem.leftBarButtonItem=barBtn;

O que eu queria alcançar era algo como os botões de retorno encontrados no aplicativo iOS 7 Music, que apresentava apenas uma única divisa.

Obrigado.


A solução simples para este problema, trabalhando no iOS7 e no 6, é definir a visualização personalizada do título no viewDidLoad:

- (void)viewDidLoad {

    [super viewDidLoad];

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    titleLabel.text = self.title;
    titleLabel.backgroundColor = [UIColor clearColor];

    [titleLabel sizeToFit];

    self.navigationItem.titleView = titleLabel;
}

Então, no viewWillAppear: você pode chamar com segurança

self.navigationController.navigationBar.topItem.title = @" ";

Como sua visualização de título é personalizada, ela não será substituída ao voltar para a pilha de navegação.


Esta é a melhor solução.

Outra solução é perigosa porque é hackear.

extension UINavigationController {

    func pushViewControllerWithoutBackButtonTitle(_ viewController: UIViewController, animated: Bool = true) {
        viewControllers.last?.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
        pushViewController(viewController, animated: animated)
    }
}

Eu criar uma classe personalizada para UINavigationController e aplicá-lo a todos os controladores de navegação no meu aplicativo. Dentro desta classe UINavigationController personalizada, UINavigationController o delegado UINavigationBar como self quando a view é carregada.

- (void)viewDidLoad {
    self.navigationBar.delegate = self;
}

Então eu implemento o método delegado:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item {

    // This will clear the title of the previous view controller
    // so the back button is always just a back chevron without a title
    if (self.viewControllers.count > 1) {
        UIViewController *previousViewController = [self.viewControllers objectAtIndex:(self.viewControllers.count - 2)];
        previousViewController.title = @"";
    }
    return YES;
}

Dessa maneira, simplesmente atribuo minha classe personalizada a todos os meus controladores de navegação e apago o título de todos os botões de volta. E só para esclarecer, eu sempre defino o título para todos os meus outros view controllers dentro do viewWillAppear para que o título seja sempre atualizado logo antes da visualização aparecer (no caso de ser removido por truques como este).


Eu não consegui fazer isso funcionar usando a resposta de Guto Araujo de navigationBar.topItem.title = @"";

No entanto, consegui obter o efeito desejado configurando self.title = @"" no método init do meu controlador de visualização. (Configurar no init é importante, o viewDidLoad não funciona.)


Eu não tive muito sucesso com as respostas fornecidas, mas encontrei um trabalho muito simples. Em seu storyboard, você pode clicar no item de navegação do seu UIViewController e definir o texto do botão Voltar. Eu configurei para um espaço único e me deu o comportamento que eu estava procurando.


Isso funcionou para mim no iOS10. Chame isso de viewDidLoad do controlador de exibição.

self.navigationController?.navigationBar.topItem?.title = ""

Isto está usando subclasse navigationController remove o "Back".

Eu estou usando isso para removê-lo, permanentemente através do aplicativo.

//.h
@interface OPCustomNavigationController : UINavigationController 

@end

//.m
@implementation OPCustomNavigationController

- (void)awakeFromNib
{
    [self backButtonUIOverride:YES];
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [self backButtonUIOverride:NO];

    [super pushViewController:viewController animated:animated];
}

- (void)backButtonUIOverride:(BOOL)isRoot
{
    if (!self.viewControllers.count)
        return;

    UIViewController *viewController;

    if (isRoot)
    {
        viewController = self.viewControllers.firstObject;
    }
    else
    {
        int previousIndex = self.viewControllers.count - 1;

        viewController = [self.viewControllers objectAtIndex:previousIndex];
    }

    viewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@""
                                                                                       style:UIBarButtonItemStylePlain
                                                                                      target:nil
                                                                                      action:nil];
}

@end

Nenhuma das respostas me ajudou. Mas um truque fez - eu limpei o título do controlador de visão que empurrou (para onde o botão de volta está indo) pouco antes de empurrá-lo.

Portanto, quando a visualização anterior não tiver um título, no iOS 7, o botão voltar terá apenas uma seta, sem texto.

No viewWillAppear da exibição push, coloquei de volta o título original.


No iOS7, a Apple introduziu duas novas propriedades no UINavigationBar, 'backIndicatorTransitionMaskImage' e 'backIndicatorImage'.

Simplesmente chamando uma vez:

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"your_image"]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"your_image_mask"]];

Ele renderizará uma imagem personalizada em vez do glifo chevron padrão, herdando a cor da tonalidade da keyWindow.

E para remover o título, sugiro a resposta de Kamaros. Lembre-se de chamar esse código no controlador de visualização que está empurrando o novo controlador de visualização. Removendo o texto do título de um UIBarButtonItem do iOS


Para definir o título do botão Voltar para um controlador de exibição sem alterar seu uso de título:

Objetivo-C:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:self.navigationItem.backBarButtonItem.style target:nil action:nil];

Rápido:

navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

Para ser claro, isso é feito no controlador de visualização que você veria se apertasse o botão Voltar. ie ao invés de ver '<Settings' você quer apenas ver '<' então no seu SettingsViewController você colocaria isso no seu init . Então você não recebe nenhum dos problemas do título não mostrando quando você está olhando para o controlador de visualização em si.


Quando você está definindo o título do botão, use @ "" em vez de @ "".

--EDITAR--

Alguma coisa muda quando você tenta outras strings? Eu estou usando o seguinte código com sucesso:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:backString style:UIBarButtonItemStyleDone target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];

backString é uma variável definida como @ "" ou @ "Back", dependendo se eu estiver usando o iOS 7 ou uma versão inferior.

Uma coisa a notar é que esse código não está no controlador da página para a qual desejo personalizar o botão Voltar. Na verdade, ele está no controlador antes dele na pilha de navegação.


Se, como eu, você estiver usando uma visualização personalizada em vez da UINavigationBar e estiver preso ao botão "Voltar", terá que fazer um pouco de trabalho que pareça um pouco claudicante.

[self.navigationController.navigationBar setHidden:NO];
self.navigationController.navigationBar.topItem.title = @"";
[self.navigationController.navigationBar setHidden:YES];

Parece que se ele não for apresentado, não importa o que tente mostrar um título, isso significa que ele é mostrado e depois oculto antes de ser desenhado e resolve o problema.


Solução perfeita globalmente

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal)
    UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)

    return true
}

Às vezes é útil ver as coisas no contexto. Aqui está um projeto mínimo que esconde o texto "de volta", mas ainda mostra a seta.

Storyboard

Há um show segue do botão "Show Second View Controller" para o segundo view controller.

Eu também adicionei um item de navegação ao segundo controlador de exibição para que ele tivesse um título. Isso é opcional. Não afeta o botão Voltar.

Código

FirstViewController.swift

import UIKit
class FirstViewController: UIViewController {

    @IBAction func showSecondViewControllerButtonTapped(sender: UIButton) {

        // hide the back button text
        navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    }
}

SecondViewController.swift

import UIKit
class SecondViewController: UIViewController {
    // Nothing at all needed here
}

Método alternativo (apenas IB, sem código)

No storyboard, selecione o item de navegação para o primeiro controlador de visualização (não o segundo). Basta digitar um espaço para o texto do botão Voltar.


SWIFT 3

navigationController?.navigationBar.topItem?.title = ""

case : <Back as <

override func viewWillAppear(animated: Bool) {
navigationController!.navigationBar.topItem!.title = ""
    }

self.navigationController.navigationBar.topItem.title = @"";

extension UIViewController{
    func hideBackButton(){
        navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    }
}

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefaultPrompt];
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(10.0, NSIntegerMin) forBarMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor],
                                                               NSFontAttributeName:[UIFont systemFontOfSize:1]}
                                                    forState:UIControlStateNormal];






uinavigationitem