Aviso de “estilo simples sem suporte em um item de navegação” com meu item de botão de barra personalizado

88

Arrasto um botão redondo reto para a posição do item do botão de barra direito e defino uma imagem para o botão redondo reto. Tudo funciona bem, exceto o aviso "Estilo simples não é compatível com um item de navegação". Mesmo se eu selecionar o estilo do item do botão da barra como "Bordado", o aviso ainda estará lá. Qual é o problema com o Xcode 4.2? Desde já, obrigado!

Ps. Eu personalizei muitos itens de botão de barra com o botão redondo reto, algumas vezes o Xcode 4.2 mostra apenas um aviso em um item de botão de barra, outras vezes mostra avisos em todos os itens de botão de barra.

lu yuan
fonte
1
Eu escrevi uma postagem no blog sobre isso: blog.mosheberman.com/…
Moshe
Não adicione botões, adicione itens de botão de barra. Esse foi meu erro.
Daniel Springer

Respostas:

135

Consegui remover esses erros editando manualmente os arquivos do storyboard e encontrando o estilo ofensivo = entrada "simples" nos itens do botão da barra no <navigationItem>elemento.

Alterado de:

<barButtonItem key="rightBarButtonItem" style="plain" id="juB-DL-F9i">

Para:

<barButtonItem key="rightBarButtonItem" id="juB-DL-F9i">

Isso eliminou os avisos ... certo ou errado.

Este pode ser um hack estupendo e a maior preocupação é que eu não o causei ou removi os itens do botão da barra invisível do documento geral. Isso foi depois de passar por todos os elementos um por um e descobrir que algumas barras de navegação estavam vazias (sem filhos) e provavelmente ocorreu com a grande quantidade de herança copiar e colar (cmd + c | v) e não usar duplicata (cmd + d) para construir a interface. Embora a causa de origem não fosse a raiz, o sintoma era que os itens da barra não eram mostrados na "visualização do esboço" do documento para serem corrigidos. O comportamento do Interface Builder às vezes me parece nuançado e um contêiner vazio onde deveria haver algo em uma visualização de contorno é um cheiro. Bem, é para mim agora. Às vezes, a exclusão do nó problemático e a reconstrução corrigem os problemas mais estranhos.

AVISO: faça backup de seus storyboards antes de tentar isso ... o controle de versão é seu amigo ... Não assumo qualquer responsabilidade quando seu storyboard estiver completamente bloqueado e não for compilado. Tudo o que você obterá é um "Eu avisei!" Aprendi da maneira mais difícil algumas vezes, mas o controle de fonte diligente me salvou de uma dor de cabeça.

EDIT: coloque colchetes em blocos de código

Hunter-Orionnoir
fonte
24
selecione o item barbutton no construtor de interface, abra o painel de atributos à direita e altere o estilo do item do botão da barra para "Bordado" e aplique o mesmo diff ao arquivo de storyboard. então isso deve ser seguro.
mash de
Obrigado por esse conselho, @mash, o jeito que eu fiz foi horrivelmente forjado com dor e sofrimento em potencial.
Hunter-Orionnoir
@ SpaceDog2 Obrigado pelo aviso. Eu ainda não atualizei, então não posso adicionar nenhuma confirmação a isso. Eu teria muito cuidado com esse método de qualquer maneira. Eu sei que ajudou muita gente até agora. Com o tempo, veremos se deixa de ajudar.
Hunter-Orionnoir
5
Esta solução funcionou perfeitamente para mim no Xcode 7.1. Além disso, em vez de editar diretamente o código-fonte, você pode alterar isso no próprio storyboard (mudando o estilo de Simples para Bordado), e isso tem exatamente o mesmo resultado de excluir manualmente style="plain"do código-fonte do storyboard. Então, para mim, essa sugestão de Hunter parece legítima.
Erik van der Neut
Confira a resposta de dstudeba também, eu nem sabia que o que ele descreveu era possível. pode evitar que todos sofram e sofram com a edição manual do arquivo. O controle da fonte são seus amigos, estejam todos seguros. ;)
Hunter-Orionnoir
31

Caso você clique no aviso e não vá para o item de navegação incorreto, faça o seguinte. (representação visual da resposta de Hunter com método mais seguro a partir de comentários adicionados)

No navegador de arquivos, clique com o botão direito no storyboard e selecione Open As Source Code

insira a descrição da imagem aqui

Na página de código-fonte, pesquise "simples" e encontre aquele anexado a um Item de Navegação.

insira a descrição da imagem aqui

Para obter o nome da Visualização, coloque "cena" na barra de pesquisa e clique na seta de pesquisa para trás para pesquisar a primeira instância dessa tag acima donavigationItem

insira a descrição da imagem aqui

Aqui está o nome da sua cena, agora você pode alterar a visualização do Storyboard de volta Interface Builder - Storyboardcom o método de clique com o botão direito descrito acima e, a seguir, selecione a cena no menu da cena e o item de barra dentro dela.

insira a descrição da imagem aqui

Vá para o inspetor de Atributos e altere o estilo de PlainparaBordered

insira a descrição da imagem aqui

dstudeba
fonte
1
Legal. Com certeza vou tentar na próxima vez que isso ocorrer.
Hunter-Orionnoir
13

Eu parei o aviso sobre o estilo simples examinando o esboço do documento. Isso estava mostrando meu item de navegação e, dentro dos 2 itens do botão da barra, e dentro de cada um deles, um botão. A configuração ofensiva estava no item do botão da barra. Em seu inspetor de atributos, mudei de Estilo de Simples para Concluído e o aviso foi embora. Nota: Estou usando o XCode 5.

MarkAurelius
fonte
8

Se você estiver usando o storyboard, clique no aviso e ele deve levá-lo ao item de navegação ofensivo (eu tinha dois para o problema, um me levou lá e o outro não) - mude o estilo e limpe o projeto.

Estilo do botão da barra definido como simples

Aço reciclado
fonte
Neste problema acima, isso não me levou a lugar nenhum. Eu acho que esse é o ponto principal dessa questão em particular, o item estava faltando no navegador, mas a resposta de dstudeba tem uma abordagem interessante, fique curioso se abrir o storyboard ajuda as pessoas de forma diferente.
Hunter-Orionnoir
Esta é a resposta mais adequada. Mudei o estilo para Bordered.
Andrej
6

backBarButtonItem leftBarButtonIteme rightBarButtonItemsão UINavigationItemobjetos. Não há stylepropriedade, por UINavigationItemisso este é o motivo do aviso. Você deve definir os barButtons de forma programática:

iOS 4:  

UIButton *bt=[UIButton buttonWithType:UIButtonTypeRoundedRect];
 [bt setFrame:YourFrame];
 //[bt setImage:[UIImage imageNamed:@"backBT"] forState:UIControlStateNormal];
 [bt addTarget:self action:@selector(popViewController:) forControlEvents:UIControlEventTouchUpInside];
 UIBarButtonItem *leftButton=[[UIBarButtonItem alloc] initWithCustomView:bt];
 self.navigationItem.leftBarButtonItem=leftButton;

Para iOS 5+:

Leia a seção "Customizing Appearance" da referência UIBarButtonItem .

Esteira
fonte
3
Eu tenho um projeto herdado com muitos controladores e botões de visualização. Não consigo convencer o XCode a me dizer qual botão está causando o aviso. Alguma dica? Obrigado!
Olie,
Talvez percorra seus controladores de visualização e "encontre" UIBarButtonItenStyle. Normalmente é onde a propriedade é definida incorretamente
TimWhiting
1

Na barra de navegação, tente usar UIBarButtonItem em vez do botão Reto redondo e defina uma imagem para ele.

iOSDev
fonte
mas o estilo de UIBarButtonItem não é o que eu preciso.
lu yuan
1

No meu caso, era a imagem de uma seta para trás, definida como "Simples".

A mensagem de erro aparece para se referir a todos os itens na barra de navegação.

user462990
fonte
0

Depois de ter certeza de que todos os seus botões de barra no storyboard estão configurados para qualquer coisa, menos simples, certifique-se de fazer um git commit e excluir os dados derivados. Passei uma eternidade tentando descobrir por que o problema não estava se corrigindo, e a exclusão da pasta de dados derivada consertou para mim.

Sethmr
fonte