Avertissement "Style simple non pris en charge dans un élément de navigation" avec mon élément de bouton de barre personnalisé

88

Je fais glisser un bouton Round Rect vers la position de l'élément de bouton de barre droit, et je mets une image sur le bouton Round Rect. Tout fonctionne bien, sauf l'avertissement "Style simple non pris en charge dans un élément de navigation". Même si je sélectionne le style de l'élément du bouton de la barre sur "Bordé", l'avertissement est toujours là. Quel est le problème avec Xcode 4.2? Merci d'avance!

Ps. J'ai personnalisé de nombreux éléments de bouton de barre avec le bouton Round Rect, parfois Xcode 4.2 n'affiche qu'un seul avertissement sur un élément de bouton de barre, parfois des avertissements sur tous les éléments de bouton de barre.

lu yuan
la source
1
J'ai écrit un article de blog à ce sujet: blog.mosheberman.com
Moshe
N'ajoutez pas de boutons, ajoutez des éléments de bouton de barre. C'était mon erreur.
Daniel Springer

Réponses:

135

J'ai pu supprimer ces erreurs en éditant manuellement les fichiers du storyboard et en trouvant l'entrée style offensante = "plain" sur les éléments Bar Button dans l' <navigationItem>élément.

Changé de:

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

À:

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

Cela a effacé les avertissements ... vrai ou faux.

Cela peut être un hack formidable et le plus gros problème est que je ne l'ai pas causé ou supprimé les éléments de bouton de barre invisibles du document global. C'était après avoir parcouru tous les éléments un par un et découvert que certaines barres de navigation étaient vides (sans enfants) et se produisaient probablement avec la grande quantité d'héritage de copier-coller (cmd + c | v) et de ne pas utiliser de duplication (cmd + d) pour construire l'interface. Bien que la cause source n'ait pas été causée par la racine, le problème était que les éléments de barre ne s'affichaient pas dans le document «vue d'ensemble» à corriger. Le comportement d'Interface Builder me semble parfois nuancé et un conteneur vide où il devrait y avoir quelque chose dans une vue en plan est une odeur. Eh bien, c'est à moi maintenant. Parfois, la suppression du nœud incriminé et la reconstruction corrigent les problèmes les plus étranges.

AVERTISSEMENT: sauvegardez vos storyboards avant d'essayer ceci ... le contrôle de version est votre ami ... Je ne prends aucune responsabilité lorsque votre storyboard est complètement arrosé et ne compilera pas. Tout ce que vous obtiendrez est un "Je vous l'ai dit!" J'ai appris à la dure à quelques reprises, mais un contrôle de source diligent m'a évité un mal de tête.

EDIT: mettre des crochets dans les blocs de code

Hunter-Orionnoir
la source
24
sélectionnez l'élément de bouton de barre dans le générateur d'interface, ouvrez le panneau des attributs à droite et changez le style de l'élément de bouton de barre en "Bordé" a appliqué la même différence au fichier de storyboard. donc cela devrait être sûr.
écraser le
Merci pour ce conseil @mash, la façon dont je l'ai fait a été horriblement causée par une douleur et une souffrance potentielles.
Hunter-Orionnoir
@ SpaceDog2 Merci pour la mise en garde. Je n'ai pas encore mis à jour, donc je ne peux pas ajouter de confirmation à cela. Je serais très prudent avec cette méthode de toute façon. Je sais que cela a aidé beaucoup de gens jusqu'à présent. Avec le temps, nous verrons s'il cesse d'aider.
Hunter-Orionnoir
5
Cette solution a parfaitement fonctionné pour moi dans Xcode 7.1. En outre, au lieu de modifier directement le code source, vous pouvez modifier cela dans le storyboard lui-même (en basculant le style de Plain à Bordered), et cela a exactement le même résultat que la suppression manuelle style="plain"du code source du storyboard. Donc, pour moi, cette suggestion de Hunter me semble légitime.
Erik van der Neut
Découvrez aussi la réponse de dstudeba, je ne savais même pas que ce qu'il décrivait était possible. pourrait sauver tout le monde de la douleur et de la souffrance de l'édition manuelle du fichier. Le contrôle de la source est vos amis, soyez en sécurité tout le monde. ;)
Hunter-Orionnoir
31

Si vous cliquez sur l'avertissement et que vous n'allez pas à l'élément de navigation incriminé, procédez comme suit. (représentation visuelle de la réponse de Hunter avec une méthode plus sûre à partir des commentaires ajoutés)

Dans le navigateur de fichiers, faites un clic droit sur le storyboard et sélectionnez Open As Source Code

entrez la description de l'image ici

Dans la page de code source, recherchez "plain" et recherchez celui qui est attaché à un élément de navigation.

entrez la description de l'image ici

Pour obtenir le nom de la vue, placez "scène" dans la barre de recherche et cliquez sur la flèche de recherche arrière pour rechercher la première instance de cette balise au - dessus dunavigationItem

entrez la description de l'image ici

Voici le nom de votre scène, vous pouvez maintenant changer la vue de votre Storyboard Interface Builder - Storyboardavec la méthode du clic droit décrite ci-dessus, puis sélectionner la scène dans le menu de la scène et l'élément de barre à l'intérieur.

entrez la description de l'image ici

Accédez à l'inspecteur des attributs et changez le style de PlainàBordered

entrez la description de l'image ici

dstudeba
la source
1
Cool. Je vais certainement essayer cela la prochaine fois que cela se produira.
Hunter-Orionnoir
13

J'ai arrêté l'avertissement concernant le style simple en fouinant dans le contour du document. Cela montrait mon élément de navigation, et dans ces 2 éléments de bouton de barre, et dans chacun de ceux-ci un bouton. Le paramètre incriminé était sur l'élément du bouton de la barre. Dans son inspecteur d'attributs, j'ai changé le style de Plain à Done et l'avertissement a disparu. Remarque: j'utilise XCode 5.

MarkAurelius
la source
8

Si vous utilisez un storyboard, cliquez sur l'avertissement et cela devrait vous amener à l'élément de navigation incriminé (j'en avais deux pour le problème, l'un m'a emmené là-bas, l'autre pas) - changez le style et nettoyez le projet.

Style de bouton de barre défini sur simple

Acier recyclé
la source
Dans ce problème ci-dessus, cela ne m'a mené nulle part. Je pense que c'est le point de blocage de ce problème particulier, l'élément manquait complètement dans le navigateur, mais la réponse de dstudeba a une approche intéressante, soyez curieux de savoir si l'ouverture du storyboard aide différemment les gens.
Hunter-Orionnoir
C'est la réponse la plus appropriée. J'ai changé le style en Bordé.
Andrej
6

backBarButtonItem leftBarButtonItemet rightBarButtonItemsont des UINavigationItemobjets. Il n'y a pas de stylepropriété UINavigationItem, c'est donc la raison de l'avertissement. Vous devez définir les barButtons par programme:

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;

Pour iOS 5+:

Lisez la section «Personnalisation de l'apparence» de la référence UIBarButtonItem .

Tapis
la source
3
J'ai un projet hérité avec beaucoup de contrôleurs de vue et de boutons. Je n'arrive pas à convaincre XCode de me dire quel bouton est à l'origine de l'avertissement. Des indices? Merci!
Olie
Peut-être passer par vos contrôleurs de vue et "trouver" UIBarButtonItenStyle. C'est généralement là que la propriété est mal définie
TimWhiting
1

Dans la barre de navigation, essayez d'utiliser UIBarButtonItem au lieu du bouton Round rect et définissez une image pour celui-ci.

iOSDev
la source
mais le style d'UIBarButtonItem n'est pas ce dont j'ai besoin.
lu yuan
1

Dans mon cas, c'était une image d'une flèche arrière, qui était réglée sur "Plain".

Le message d'erreur semble faire référence à tous les éléments de la barre de navigation.

user462990
la source
0

Une fois que vous êtes sûr que tous vos boutons de barre dans le storyboard sont définis sur autre chose que simple, assurez-vous de faire un commit git et de supprimer les données dérivées. J'ai passé une éternité à essayer de comprendre pourquoi le problème ne se résolvait pas, et la suppression du dossier de données dérivé l'a corrigé pour moi.

Sethmr
la source