Aucune action sur UIButtonBarItem
Bonjour à tous,
J'ai un problème plutôt que je vais vous décrire.
J'utilise une barre de menu (UIToolbar) possédant des UIButtonBarItem sur chaque vue de mon application.
Cette barre de menu ainsi que ces boutons marchent bien sur toutes les pages exceptés une.
J'ai essayé en glissant le bouton dans mon code via le IBAction, rien ne se passe. J'ai essayé de définir manuellement mon action (via le code ci-dessous) et rien ne passe non plus. J'ai même essayé de définir un delegate sur mon UIToolbar en me disant que ça venait peut être de la, mais toujours rien.
[_silhouette setAction:@selector(connexionMembre)];
_silhouette est évidemment mon UIBarButtonItem.
J'aimerais vraiment qu'on m'explique pourquoi cela ne marche pas sur cette vue alors qu'elle marche sur toutes les autres.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu essaies de de mettre le méthode dans quelle classe ?
Dans ma classe de messages citée plus bas
J'ai bien le même nom pour l'interface et pour la classe, c'est pas un souci
Tu as effectivement plusieurs solutions pour attribuer une IBAction à une méthode. Par le xib en faisant glisser la souris comme tu as du essayer, et par le code.
Dans le cas du code, je crois qu'il ne faut pas le faire trop tôt, car sinon la vue n'est pas complètement chargée au moment où tu fais ton "setAction".
Pour ma part, j'utilise plutôt ceci :
que je mets dans le viewDidLoad...
Effectivement j'ai essayé via le xib en faisant glisser
Le setAction a été fait dans le viewDidLoad, ta solution j'en suis pas forcément fan, puisque mon button existe déjà donc à quoi bon le recréer
Oui, j'ai bien compris qu'il existait déjà ! Mais, soit tu le crée uniquement par code, avec ce que je t'ai écrit, soit tu le fait par xib avec le glisser du bouton vers le code (pas de raison que çà ne marche pas) ; soit encore si tu veut attribuer l'action par code sur un bouton existant, il faut faire le setAction quand la vue est finie de charger (viewDidAppear plutôt).
Sinon ta méthode existe bien ?
Elle n'a pas d'argument ? (si c'est le cas, ne pas oublier les ":" après son nom dans le selector) : @selector(myAction.
As tu essayé de faire un clean de ton projet, car il peut y avoir une ancienne méthode qui est linkée au bouton et qui n'existe plus...
Est-ce que tu peux nous montrer le code de ta classe et une capture d'écran de ton xib ?
@Alf, j'ai mis mon code dans le viewDidAppear, la méthode existe bien, elle n'a pas d'arguments, j'ai fait un clean de mon projet et pourtant toujours rien
@Joanna oui je te met ça en dessous, il faut savoir que dans mon menu (en bas) l'étoile s'affiche en jaune orangée, et la silhouette en blanc
MessTchat.m
MessTchat.h
MessTchat.xib
cf miniature jointe
Voila
Tu n'as pas marqué la méthode -connexionMembre come IBAction, ni dans le .h, ni dans le .m ; du coup, le drag ne marchera pas dans le xib
Parce que c'est pas une IBAction, c'est justement quand j'ai essayé de le linker via le code, d'ou le void. L'IBAction qui fais la même chose est "profil"
Mais pourquoi avoir les deux méthodes qui font la même chose ?
La première méthode via IBAction ne marchant pas, j'ai essayé la méthode par code via le void pour voir si celle la marchait, mais force est de constater que non
Question - tu as utiliser un UIToolbar et un UINavigationController pour faire la même chose que l'on obtienne en utilisant un UITabViewController. En fait, tu as réinventé la roue mais avec plus de code. ::)
Que veut tu dire ? Je ne comprends pas trop ce dont tu me parles.
Tu penses que le souci puisse venir de ça ?
Tous dans un storyboard ci-joint
Euh oui et ? J'ai bien vu que l'item 2 apparait 4 fois différents, mais je vois pas où tu veut en venir...
Le text sur les vues est le résultat de copier/coller mais le principe est qu'il n'est pas nécessaire d'écrire du code pour changer la vue sélectionné, ni de connecter les boutons
Oula, tu m'intrigues fortement en me disant ça.
Je ne sais pas si ça joue, mais je n'utilise pas le storyboard.
Tu penses vraiment que mon souci viendrait de la ?
Non mais, en utilisant un storyboard, tu t'économises du code et de soucis
Je suis peut être un vieux c** adepte du "c'était mieux avant" mais je trouve ça plus simple et plus intuitif sans utiliser le storyboard, surtout que j'ai appris sans les storyboards :P
Une idée de la source de mon problème s'il te plait ?
Aucune idée. J'ai reconstruit un xib avec ViewController et Toolbar et j'ai pu connecter les boutons aux méthodes, comme tu peux voir ci-joint
Bah la mes boutons sont connectés, mais il ne se passe rien
La preuve en miniature
Deux questions :
1. Comment crées-tu le ViewController et le View ?
2. Les méthodes, sont-ils appelés ?
Bah "New File" => "Objective C class" puis "UIViewController" et je coche "Also create XIB File"
Oui les méthodes sont appelés automatiquement via le IBAction
Une idée bête, as tu activé le champs " User Interaction Enable" de ton bouton ou de ta toolbar ?
Tellement bête que je ne l'ai pas précisé lors de mon 1er message, c'est effectivement coché sur Enabled et donc activé
No, je voulais dire comment crées-tu le ViewController dans ton code ?
Alors, selon ta capture d'écran, le boutons sont biens connectés aux méthodes ; qu'est-ce qui ne fonctionne pas ?
Bah je crée mon ViewController comme cela, si c'est ça la question ^^
Le problème est la justement, ce que j'ai fait pour cette vue, je l'ai fait pour toutes les autres et ça ne fonctionne pas dans cette vue et je ne comprends pas. Si j'appuie sur les boutons de mon menu, absolument rien ne se passe, chose absolument pas normale...
Mais [[MesTChat alloc] init] ne créera que le ViewController sans le View du xib, sauf si tu "override" la méthode init ; ce que tu n'as pas fait selon le code que tu as posté
Bah pourtant je fais ça absolument partout, à chaque fois que je doit changer de vue, et ça marche partout hormis dans MessTchat
Et sinon si je l'override la méthode, avec le super initWithNibName... qui est créée automatiquement