Como ocultar o botão 'Voltar' na barra de navegação do iPhone?

315

Adicionei um controle de navegação para alternar entre visualizações no meu aplicativo. Mas algumas das visualizações não devem ter o botão 'Voltar' (o título anterior). Alguma idéia de como ocultar o botão Voltar?

Zhong frio
fonte

Respostas:

812

Objetivo-C:
self.navigationItem.hidesBackButton = YES;

Rápido:
navigationItem.hidesBackButton = true

user8170
fonte
@ user8170 como ocultar o barbuttonitem esquerdo na barra de navegação ..?
rockey
9
você não pode esconder o botão de volta self.navigationItem.leftBarButtonItem = nil;. Se você configurou explicitamente o botão da barra esquerda, pode usar self.navigationItem.leftBarButtonItem = nil;. self.navigationItem.hidesBackButton = YES;irá esconder o botão Voltar Item
rakeshNS
1
No iOS 7, self.navigationItem.leftBarButtonItem = nil; não afeta o botão Voltar quando emitido a partir do viewDidLoad, viewWillAppear ou viewDidAppear. Essa linha de código funciona dentro do viewdidLoad: self.navigationItem.hidesBackButton = YES;
Alex Zavatone
2
não tenho certeza se isso ajuda, mas 'self' é sempre um controlador de exibição que está sendo apresentado na parte superior da pilha do controlador de navegação.
Kunal Balani
self.navigationItem.hidesBackButton = YES; obras para me em viewDidLoad, iOS 7
leukosaima
38

A melhor maneira é combiná-las, para ocultar o botão voltar, mesmo se você o configurar manualmente:

self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;
Skrew
fonte
6
Para responder a user716216, ele explicou na explicação de uma frase. A segunda linha de código é o que funciona para o caso padrão. A primeira linha de código funcionará se você tiver criado e adicionado o botão você mesmo.
Alex Zavatone 14/01
21

ocultar o botão voltar com o código abaixo ...

[self.navigationItem setHidesBackButton:YES animated:YES];

ou

[self.navigationItem setHidesBackButton:YES];

Além disso, se você tiver personalizado UINavigationBar, tente o código abaixo

self.navigationItem.leftBarButtonItem = nil;
Paras Joshi
fonte
em qualquer classe quando você usou aquele código, em seguida, no botão NavigationBar volta dessa classe irá esconder ...
Paras Joshi
6

Em Swift :

Adicione isso ao controlador

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.setHidesBackButton(true, animated: false)
}
O rei da bruxaria
fonte
3

Na função viewDidLoad do UIViewController, use o código:

self.navigationItem.hidesBackButton = YES;
indiefr
fonte
2

Não esqueça que você precisa chamá-lo no objeto que possui o controlador nav. Por exemplo, se você tiver um controlador nav pressionando um controlador de barra de guias com um RootViewController, chamar self.navigationItem.hidesBackButton = YESo RootViewController não fará nada. Você realmente teria que ligarself.tabBarController.navigationItem.hidesBackButton = YES

Tyler
fonte
2

Não esqueça que agora temos o slide para trás. Você provavelmente deseja remover isso também. Não se esqueça de ativá-lo novamente, se necessário.

if ([self.navigationItem respondsToSelector:@selector(hidesBackButton)]) {
    self.navigationItem.hidesBackButton = YES;
}

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
Bruno Delgado
fonte
1

Adicione este código ao seu controlador de exibição

UIView *myView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 30)];
UIBarButtonItem *btnL = [[UIBarButtonItem alloc]initWithCustomView:myView];
self.navigationItem.leftBarButtonItem = btnL;
Bhavsar1311
fonte
1

Para mim, nenhuma das opções acima parecia funcionar, não tinha efeito visual. Estou usando storyboards com uma exibição "incorporada" em um controlador de navegação.

Depois, no nível do código, adiciono meus itens de menu e, por algum motivo, o "backButton" fica visível ao depurar visualmente a hierarquia de visualizações, e meu ícone de menuItem é exibido abaixo do invisível "botão de retorno".

Eu tentei as configurações, conforme sugerido nos vários métodos de gancho e que não tiveram efeito. Então, tentei uma abordagem mais brutal e iteramos na subview, que também não teve efeito.

Inspecionei os tamanhos dos meus ícones e parecia estar ok. Depois de me referir à diretriz de interface humana da Apple, confirmei que meus ícones estão corretos. (1 pixel menor no meu caso 24px 48px 72px).

A parte mais estranha, então, é a correção real ...

Ao adicionar o item BarButton, atribua a ele um título com pelo menos um caractere . No meu caso, um caractere de espaço.

Espera que isso ajude alguém.

//left menu - the title must have a space
UIBarButtonItem *leftButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " <--THE FIX 
                                                                    style:UIBarButtonItemStylePlain
                                                                  target:self
                                                                  action:@selector(showMenu)];
leftButtonItem.image = [UIImage imageNamed:@"ic_menu"];

[self.navigationItem setLeftBarButtonItem:leftButtonItem];
Wayne
fonte
1

Não estava funcionando para mim em todos os casos quando defini

self.navigationItem.hidesBackButton = YES;

em viewWillAppear ou ViewDidLoad, mas funcionou perfeitamente quando eu o defini no init do viewController.

Joe M
fonte
0

tente este - self.navigationController?.navigationItem.hidesBackButton = true

Ahil Rahesh
fonte
0

Em c # ou Xamarin.ios, this.NavigationItem.HidesBackButton = true;

Anisetti Nagendra
fonte
0
navigationItem.leftBarButtonItem = nil
navigationItem.hidesBackButton = true

Se você usar esse bloco de código dentro do didLoad ou do loadView, funcionou, mas não funcionou perfeitamente.

Qual é a solução perfeita?

Adicione o componente BarButtonItem do componentView (Command + Shift + L) à barra de navegação viewControllers de destino.

Selecione BarButtonItem set Title = "" no painel direito

insira a descrição da imagem aqui

ahmet yilmaz
fonte