iphone - item - icon menu ios



Como faço para alterar o título do botão "voltar" em uma barra de navegação (20)

Atualmente, o valor padrão do botão da barra esquerda é o título da visualização que carregou a atual, ou seja, a visualização a ser mostrada quando o botão é pressionado (botão voltar).

Eu quero mudar o texto mostrado no botão para outra coisa.

Eu tentei colocar a seguinte linha de código no método viewDidLoad do controlador de exibição, mas parece não funcionar.

self.navigationItem.leftBarButtonItem.title = @"Log Out";

O que devo fazer?

Obrigado.

https://ffff65535.com


A maioria das soluções elimina o estilo original do BackButton (botão da barra de seta para a esquerda) enquanto adiciona um botão normal com o título desejado.
Então, para manter o estilo original existem 2 maneiras:
1º: Usar estilo de botão não documentado (110 ou algo parecido) que prefiro não fazer. Mas se você quiser, você pode encontrar como fazer isso aqui, no .
2º: Usar a ideia do Trenskow. Eu gostei e eu uso um pouco mudou.
Em vez de substituir o título - (NSString *), decidi manter o título original da seguinte maneira (o que me permite usar os títulos de ponta, bem como o título dado no estado de push btw).

- (void)viewDidLoad {
    [super viewDidLoad];
    static NSString * backButtonTitle[email protected]"Back"; //or whatever u want

    if (![self.title isEqualToString:backButtonTitle]){

        UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
        customTitleView.text = self.title; // original title
        customTitleView.font = [UIFont boldSystemFontOfSize:20];
        customTitleView.backgroundColor = [UIColor clearColor];
        customTitleView.textColor = [UIColor whiteColor];
        customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
        customTitleView.shadowOffset = CGSizeMake(0, -1);

        [customTitleView sizeToFit];

        self.navigationItem.titleView = [customTitleView autorelease];
        self.title = backButtonTitle; 
    }
}

Essa solução funciona bem e parece nativa. Além disso, se for usado no método viewDidLoad, isso impedirá a execução mais de uma vez.
Também tentei uma solução de Jessy, mas parece ruim. Isso torna visível a alteração da barra de título do usuário na hora do original para o BackButton desejado e vice-versa.


A resposta de Stan foi a melhor. Mas também tem um problema, quando você usa o controlador com uma barra de abas e altera o título do controlador, você pode alterar o título da barra de abas. Então, a melhor resposta é mudar o view_controller.navigationItem.title apenas e usar o view_controller.navigationItem .title na função. A resposta está aqui: (Com ARC e adicione-os no viewDidLoad da view)

  static NSString * back_button_title[email protected]"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }

Em mim mesmo uso, eu faço uma função como essa, só tenho o recurso com um código de linha no viewDidLoad.

+ (void)makeSubViewHaveBackButton:(UIViewController*) view_controller{
  static NSString * back_button_title[email protected]"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }
}

Aqui está a resposta:

Em viewDidAppear:animated (NOT in viewDidLoad ) faça o seguinte

- (void)viewDidAppear:(BOOL)animated
{
     [self.navigationController.navigationBar.backItem setTitle:@"anything"];

     // then call the super
     [super viewDidAppear:animated];
}

Isso se você quiser manter a forma do botão de volta.


Aqui está outra maneira de fazer isso.

No controlador de exibição pai, implemente o seguinte método:

- (void) setBackBarButtonItemTitle:(NSString *)newTitle {
  self.navigationItem.backBarButtonItem.title = newTitle;
}

No seu controlador de visualização filho, quando você quiser alterar o título, isso funcionará:

NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];

Eu nunca consegui fazer com que a propriedade parentViewController funcionasse:

[(ParentViewController *)(self.navigationController.parentViewController) setBackBarButtonItemTitle:@"New Title"];

Eu não sei se isso é um bug ou não estou usando corretamente. Mas pegar o penúltimo controlador de visualização na matriz viewControllers aponta para o controlador de exibição pai e posso chamar métodos pai corretamente com essa referência.


Descobri que a maneira mais fácil de alterar o nome do botão Voltar é definir o título dos controladores de visualização como o título do botão Voltar e, em seguida, substituir o titleView no item de navegação Controladores de Visualização por um rótulo personalizado. nome.

Como isso:

CustomViewController.m

@implementation CustomViewController

- (NSString*)title {
    return @"Back Button Title";
}

- (void)viewDidLoad {
    [super viewDidLoad];
    UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
    customTitleView.text = @"Navigation Bar Title";
    customTitleView.font = [UIFont boldSystemFontOfSize:20];
    customTitleView.backgroundColor = [UIColor clearColor];
    customTitleView.textColor = [UIColor whiteColor];
    customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    customTitleView.shadowOffset = CGSizeMake(0, -1);

    [customTitleView sizeToFit];

    self.navigationItem.titleView = [customTitleView autorelease];
}

@end

Isso fará com que seu título no UINavigationBar pareça ser nativo. Dar ao controlador de visualização a capacidade de separar o título e o título do botão de retorno.

No caso do controlador de visualização A e B, A é responsável por informar como o botão voltar deve ficar, enquanto B é exibido.

EDIT: Isto também mantém a aparência nativa do botão Voltar (o item do botão da barra de seta para a esquerda).


Em ChildVC isso funcionou para mim ...

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

Funciona no Swift também!

self.navigationController!.navigationBar.topItem!.title = "Back"

Este código funciona também. Coloque isso no controlador raiz do controlador de navegação:

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

Eu sei, a questão é muito antiga, mas encontrei uma boa solução.

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @"Custom Title";
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

Funciona de childView! Testado com o iOS 7.


Eu tinha um controlador de visão pai com um título muito longo. Isso resultou no sangramento do botão Voltar para o título do controlador de visualização filho.

Depois de tentar várias soluções diferentes, foi o que acabei fazendo (expandindo a abordagem do @ john.k.doe):

Usando o Xcode 7.2, Swift 2

  1. No Storyboard, adicione um Navigation Item à cena do Controlador da Visão Parente (não ao VC filho)

  1. No Attributes Inspector de Attributes Inspector do seu novo Navigation Item , digite um caractere de space no campo Back Button . Mais sobre isso depois.

  1. No controlador de exibição pai , adicione o seguinte código:

snippet:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch segue.destinationViewController {
    case is ChildViewController:
        navigationItem.backBarButtonItem?.title = ""
    default:
        navigationItem.backBarButtonItem?.title = "Full Parent Title"
    }
}

Explicação:

O tipo de botão Voltar pertence ao controlador de exibição pai. O Navigation Item fornece um identificador para o botão Voltar, para que você possa definir o título no código ou no Storyboard.

Nota:

Se você deixar o texto do Back Button Navigation Item como a sequência vazia padrão, o título do botão Voltar se tornará "Voltar".

Outras abordagens funcionam, por que usar este?

Embora seja possível substituir o título do botão Voltar no controlador de visualização filho, foi um desafio obter um identificador para ele até que ele já tivesse piscado brevemente na tela.

Algumas das abordagens constroem um novo botão Voltar e substituem o existente. Tenho certeza de que funciona e provavelmente necessário em alguns casos de uso. Mas eu prefiro aproveitar as APIs existentes quando possível.

Alterar o title do controlador de visualização pai é a solução mais rápida para algumas situações. No entanto, isso altera o título pai, portanto, você precisa gerenciar o estado. As coisas também ficam confusas com o Tab Bar Controller porque as alterações de título causam efeitos colaterais com os títulos do Tab Bar Item Guias.


Isso deve ser colocado no método que chama o ViewController intitulado "NewTitle". Logo antes da instrução push ou popViewController.

UIBarButtonItem *newBackButton = 
        [[UIBarButtonItem alloc] initWithTitle:@"NewTitle" 
                                         style:UIBarButtonItemStyleBordered 
                                        target:nil 
                                        action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
[newBackButton release];

Isso funciona para mim como uma versão "simplificada" de respostas postadas anteriormente.

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];

backButton.title = @"Go Back";

self.navigationItem.backBarButtonItem = backButton;

Lembre-se de colocar o código dentro do controlador de visualização pai (por exemplo, a visualização que possui a visualização de tabela ou o UITableViewController), não a visualização de detalhes ou filho (por exemplo, UIViewController).

Você pode localizar facilmente a string do botão de retorno assim:

backButton.title = NSLocalizedString(@"Back Title", nil);

Nenhuma das soluções explicadas aqui funcionou para mim. Então, o que eu fiz foi remover o título da cena de onde eu vim da seguinte maneira:

self.title = @"";

Então, quando uma nova cena é apresentada, o texto de retorno não aparece.

Eu absolutamente concordo que esta não é uma solução clara, mas funcionou e nenhum dos explicados funcionou para mim.


Ok, aqui está o caminho. Se você tem um controlador de visualização "primeiro" e navega por outro controlador de visualização "segundo" pressionando um botão ou etc., precisa fazer algum trabalho. Primeiro você precisa criar um BarButtonItem no método ViewDidLoad do "segundo" view controller como este;

    UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

Depois de fazer isso, você precisa escrever no código para a ação "btnBack" no mesmo arquivo .m como este;

-(IBAction)OnClick_btnBack:(id)sender  {
      [self.navigationController popViewControllerAnimated:YES];
    //[self.navigationController pushViewController:self.navigationController.parentViewController animated:YES];
}

Isso é tudo.


PROBLEMA: o texto "Voltar" na barra de navegação não pode ser substituído.

MOTIVO: rótulo "Voltar" é definido na barra de navegação depois de pressionar uma exibição porque o atributo .title no controlador de exibição pai foi definido como nulo (ou não inicializado).

UMA SOLUÇÃO: Se você definir self.title = "Whatever ...", verá que, em vez de "Back", aparecerá "Whatever ..." após pressionar o novo controlador de visualização.


Para aqueles que usam storyboards, basta selecionar o frame controlador do view (certifique-se de clicar com o botão direito na barra de navegação e depois abrir o inspetor de atributos, onde você encontrará três entradas de formulário. O terceiro " botão de volta "é que estamos procurando.


Se você quiser não apenas alterar o texto do botão Voltar para o mesmo texto e manter a forma original da seta para a esquerda, mas também para fazer algo quando o usuário clicar no botão Voltar, recomendo que você dê uma olhada no meu " CustomNavigationController " .


Use abaixo da linha de código:

UIBarButtonItem *newBackButton =
[[UIBarButtonItem alloc] initWithTitle:@"hello"
                                 style:UIBarButtonItemStylePlain
                                target:nil
                                action:nil];

self.navigationItem.leftBarButtonItems =[[NSArray alloc] initWithObjects:newBackButton, nil];

self.navigationItem.leftItemsSupplementBackButton = YES;

Versão rápida:

No seu ViewController filho:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.backItem?.title = "TEXT"
}

self.navigationController.navigationBar.backItem.title = @"TEXT";

E em Swift:

self.navigationController?.navigationBar.backItem?.title = "TEXT"

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

você pode colocá-lo sempre que quiser no código no controlador parrent, o que permite que você tenha botões de volta diferentes para diferentes visualizações de criança.





uinavigationitem