xcode / storyboard: não é possível arrastar o botão da barra para a barra de ferramentas na parte superior

99

Eu tenho um controlador de visualização que é a visualização de detalhes de uma tabela. Ao clicar na linha da tabela, você é direcionado para a visualização de detalhes. A visualização de detalhes está embutida em um controlador de navegação de forma que haja um botão no canto superior esquerdo da barra de navegação que o envia de volta à mesa. Por enquanto, tudo bem.

Agora quero adicionar um botão de edição ao lado direito da barra de navegação para que você possa editar a visualização de detalhes. Meu plano é adicionar outro controlador de visualização modalmente que permite editar os detalhes do item. Coisas padrão.

No entanto, quando tento arrastar um item do botão da barra da lista de objetos para a barra de navegação, ele não funciona. Em vez disso, quando eu solto o botão do mouse, ele deixa o botão da barra no controlador da barra de guias na parte inferior. (Meu esquema de navegação inclui guias diferentes e para cada guia uma tabela, visualização de detalhes etc.)

Qualquer um que já passou por isso antes pode sugerir o que estou fazendo de errado ou algum tipo de solução alternativa para adicionar o item do botão da barra ao lado direito da tela de navegação. Tenho que adicionar no código?

Obrigado por qualquer sugestão.

user1904273
fonte
Confira o seguinte tutorial brianflove.com/2012/10/01/…
casillas
Consegui adicionar o botão usando self.navigationItem.rightBarButtonItem = self.editButtonItem; e criei um novo editvc no storyboard, no entanto, não tenho certeza de como criar segue. Não é possível fazer isso no storyboard porque o botão de edição não está visível, então acho que deve estar no código. vai tentar preparar-se?
user1904273
Se uma das respostas ajudou você, você deve aceitá-la :)

Respostas:

157

Tive o mesmo problema ao usar o Xcode6 e percebi que UINavigationItem é adicionado automaticamente para o primeiro ViewController que você incorpora no NavigationController, mas para os ViewControllers subsequentes, você terá que adicioná-lo manualmente da seguinte maneira:

  1. Na biblioteca de objetos, encontre o item de navegação e arraste-o para o segundo ViewController no storyboard.
  2. Na biblioteca de objetos, localize o item do botão da barra e arraste-o para o item de navegação que você criou na etapa anterior.

Agora você terá seus botões de barra presos no topo de sua cena.

Atualizar A solução ainda funciona com o XCode 7, mas eu queria adicionar uma foto mais descritiva. Apenas no caso de alguém não estar realmente familiarizado com os nomes padrão ou técnicos mencionados acima. Observe as setas vermelhas à direita; elas se referem à etapa 1, etapa 2 mencionada acima. Observe também a hierarquia de visualizações no retângulo vermelho esquerdo. insira a descrição da imagem aqui

Wael Showair
fonte
2
Sim, isso bastou para mim. Acho que essa é a resposta correta, o XCode não parece adicionar o Item de Navegação aos ViewControllers subsequentes.
Jeremy Chone
isso está correto, mas a seta vermelha na imagem deve ir do item do botão da barra na biblioteca de objetos até a caixa vermelha esquerda.
malhal
Você pode soltá-lo na tela, bem como indicado pela seta vermelha, ou pode soltá-lo no contorno do documento conforme sugerido. Não faz diferença
Wael Showair
Ainda bem que encontrei esta resposta porque funciona muito bem - só estou perplexo porque o UINavigationItem ainda não está lá no Storyboard? Obviamente, está lá em tempo de execução, porque o código self.navigationItem.rightBarButtonItem = ...funcionará. Estou supondo que o UINavigationController no primeiro VC o instancia para todos os VCs subsequentes colocados na pilha. No entanto, arrastando um manualmente para lá, por que você não acaba com 2 UINavigationItems um sobre o outro? O que você arrastou manualmente e o que já está lá do UINavigationController?
James Toomey de
70

Truque desagradável:

  1. Mude sua segue para push.
  2. Defina o conteúdo de que você precisa
  3. Voltar para mostrar

Então, o conteúdo será editável e você terá um estilo não obsoleto para segue.

Baxter Lopez
fonte
Cara, tão feio. Mas isso funciona para UIBarButtonItemem um controlador de visualização no Xcode 7.3 .
mikeho
OMG, ainda está funcionando no XCode 8.2.1. Quando será consertado? Nunca, provavelmente
Dima Rostopira
Esta é a única maneira que encontrei sem adicioná-la por código.
Josué
Oh Deus ... Obrigado (y)
Nasir Khan
Eu não posso acreditar que este bug ainda está aqui depois de mais de 2 anos
Carioni 01 de
33

O controlador de visualização do seu storyboard provavelmente está faltando a Navigation Item. Você pode arrastar um da biblioteca de objetos e soltá-lo em seu controlador de visualização.

Você poderá então arrastar e soltar itens do botão da barra para o lado esquerdo ou direito da barra de navegação.


fonte
1
isso funcionou, mas eu sinto que isso costumava ser feito automaticamente, desde que você tivesse um push segue para um controlador
aryaxt 02 de
Esta deve ser a resposta correta. O resto me parece hackeado
MK Yung
23

eu resolvi. arraste o 'Item de navegação' para a visualização de detalhes. do que você pode arrastar no item do botão da barra.

Jamal N. Ahmad
fonte
8

A maneira como eu corrigi esse problema foi, em vez de arrastar um UINavigationController para o Storyboard e tentar adicionar UIBarButtonItems a ele, arrastei um UITableViewController e fui para

Editor-> Incorporar-> Controlador de Navegação

O que deu o mesmo resultado de antes, exceto que pude adicionar UIBarButtonItems a ambos os lados da barra de navegação sem problemas.

Tallen11
fonte
Você deve subir !!
Vin
5

É realmente um problema com o xcode. Um truque que funcionou para mim é adicionar o botão da barra em VER ESTRUTURA DO ARQUIVO À ESQUERDA.Instaed adicionar a exibição diretamente. Espero que ajude você. :)

Chetan Kumar
fonte
Isso funciona! Acho que essa é a solução, desde que a Apple conserte o bug com o Xcode 8.2
Arjun Kalidas
5

Eu acho que é um bug. Eu tive o mesmo problema. Resolvi este problema desabilitando as classes de tamanho e depois habilitando.

Você pode desativar e ativar as classes de tamanho no documento do construtor de interface.

insira a descrição da imagem aqui

Hongyang
fonte
4

Eu também tive esse problema, fechar e reabrir o projeto funcionou para mim.

Hsm
fonte
3

Eu acredito que é uma peculiaridade do XCode. Eu tive o mesmo problema. Tive que redefinir o Xcode e mudar o posicionamento das coisas no storyboard para finalmente fazê-lo funcionar. Está funcionando agora.

manguito rotativo
fonte
3

Acho que é um bug do Xcode. No Xcode 8, mude o seguestoryboard antes do controlador de visualização da barra de guias para todas as suas opções ( show detail, present...). Então, de volta para show. Tente arrastar os itens do botão da barra e modificar o bloco. Funciona para mim!

user2174595
fonte
1

Você tentou "limpar" seu projeto? Sei que às vezes me ajuda (basta ir em "Produto"> "Limpar"). Ou, como alternativa, exclua a barra de navegação e tente novamente.

Se você acha que é um erro de programação, fique à vontade para repassar seu código. Ficarei feliz em ajudar no que puder. :)

JJ Yu
fonte
1

Você deve redefinir o xCode IDE. Feche o xCode e escreva os códigos abaixo no terminal ... Funcionará.

rm -rf $HOME/Library/Application Support/Developer/Shared/Xcode
rm -rf $HOME/Library/Preferences/com.apple.dt.Xcode.*
rm -rf $HOME/Library/Saved\ Application\ State/com.apple.dt.Xcode.savedState
rm -rf $HOME/Library/Developer/Xcode
Yusuf Kıldan
fonte
1

O mesmo problema. Eu tinha um Table View Controller dentro de um Navigation Controller e muitos ViewControllers seguindo mais abaixo na cadeia. Um 'Item de navegação' estava sendo criado automaticamente para o controlador de visualização raiz FIRST e eu poderia adicionar um 'Item de botão de barra' a ele sem problemas. Através do Storyboard, arraste e solte. Mas isso é tudo. No Controlador de visualização de tabela a seguir e outros controladores de visualização, mesmo que estivessem dentro do Controlador de navegação inicial (o botão voltar gerado automaticamente apareceu), o storyboard nunca me deixaria adicionar um item de botão de barra.

A solução de Wael Showair não funcionou para mim. Os itens do botão da barra não apareceriam.

Resolvi isso programaticamente no final (Swift 2.0):

var testButton = UIBarButtonItem(title: "Test Button", style .Plain, target: self, action: "testButtonMethod")
self.tabBarController?.navigationItem.rightBarButtonItem = testButton

Nenhum item de navegação extra ou item de botão de barra necessário.

Elliott Davies
fonte
1

Eu também estava enfrentando o mesmo problema. Consegui corrigir esse problema selecionando a opção do controlador de visualização raiz e, em seguida, na matriz simulada, alterei a opção Barra superior para Barra de navegação opaca e fui capaz de adicionar o item no topo da barra de navegação. Esperança esta resposta vai ajudar alguém.

Reetu
fonte
1

Tive o mesmo problema no xcode 8. Tive que simplesmente fechar o xcode e reabrir o projeto e, em seguida, fui capaz de adicionar o botão da barra ao controlador raiz sem problemas.

SGM
fonte
1

Para XCode 8

Existem muitas respostas aqui. Tentei alguns deles, mas não consegui. Então eu encontrei minha solução, apenas selecione seu ViewController, vá para a seção Attributes Inspector e altere a barra superior para barra de navegação opaca e barra. Você verá a barra de navegação em seu storyboard. Você pode alterar o título ou adicionar algum item. Se não quiser manter opaco, você pode alterar o estilo para inferido .

insira a descrição da imagem aqui

emresancaktar
fonte
1

No Xcode 10, eu apenas mudei o tipo de segue indo para este novo controlador de visualização para 'Push (obsoleto)', adicionei o item de navegação como era permitido depois que fiz essa troca. Se você voltar ao tipo de segue desejado originalmente, o item de navegação permanecerá.

Mark Lyons
fonte
0

Em vez de arrastar o "Item do botão da barra" para o "Controlador de navegação", arraste-o para o "Controlador de visualização de detalhes". Conforme você incorpora a visualização de detalhes na "Visualização de navegação", "Item de navegação" é adicionado ao "Controlador de visualização de detalhes". Se você arrastar o "Item do botão da barra" para o lado direito do item de navegação, o item será incluído em "Itens do botão da barra direita"

Nancy
fonte
0

como disse Mark Lyons, usei a mesma solução.

  • usei push segue primeiro
  • adicionou o item da barra
  • voltar para mostrar segue
  • feito
A_Mo
fonte
0

No Xcode 11, você pode arrastar um botão para a barra de navegação para criar seu botão de barra.

Sala
fonte