Como faço para ligar um botão no UINavigationBar?
-
11-09-2019 - |
Pergunta
Eu deixei cair um UINavigationBar
no formulário XIB. Então eu deixei cair um UIButton
no formulário (não no UINavigationBar
). Eu mudei o tipo de InfoLight
(de modo que ele se parece com um símbolo Info).
Em seguida, arrastou o UIButton para o UINavigationBar
e configurá-lo para ser o botão direito. Ele magicamente muda o tipo de UIButton
para UIButtonBarItem
como resultado do arrasto.
Por que não eu só arrastou o UIButton
para o UINavigationBar
para começar? Porque, uma vez que o botão é lá, Interface Builder não vai deixar você alterar o tipo de InfoLight
por qualquer motivo.
A no arquivo .h adjacente, eu criei uma declaração para o IBAction
- (IBAction) btnInfoClick;
Em seguida, no arquivo .m, eu escrevi a implementação:
- (IBAction) btnInfoClick {
// kick off the about screen
// code follows
}
Como faço agora ligar o botão na barra de navegação à minha função btnInfoClick?
Ou eu estou indo pelo caminho errado para começar?
Gostaria de salientar que se eu simplesmente arrastar um botão da Biblioteca diretamente para a barra de navegação, eu posso clicar no ícone do proprietário do arquivo e arraste o IBAction
btnInfoClick para o botão. Neste caso, a incêndios clique evento bem.
No entanto, no cenário onde eu primeiro arraste o botão em outro lugar e, em seguida, na barra de navegação, o evento nunca incêndios. Não sei o que estou fazendo de errado.
Solução 2
Eu acho, é um bug no IB. Mas eu encontrei uma solução alternativa aqui . Reposting para a posteridade:
- Criar um botão no modo de exibição (não a barra de navegação!)
- Definir este botão para ser Informações Luz
- Definir a ação para este botão para ser toque Dentro Up
- Mova o botão para a barra de navegação
Outras dicas
Abra IB, selecione o UIBarButtonItem e no Inspector, vá para a guia Conexões.
Arraste a partir do ponto no direito de selector para a sua AppDelegate / dono do arquivo (aquele onde a ação foi definido) e selecione a ação.
Eu suponho que você já tentou isso, mas apenas no caso. Quando a ação não aparecer, tente ajustar sua definição de ação para ser algo como:
- (IBAction)btnInfoClick:(id)sender;
e tente o processo novamente. Eu sei que você realmente não tem que especificar o remetente (pelo menos por meio de programação, do jeito que eu sempre uso), mas eu tive o mesmo problema e depois de adicionar o remetente param funcionou corretamente.
Boa sorte e deixe-me saber se isso funciona!