Xcode 6 et 5: impossible de connecter les outlets sur une UITableViewCell après Autolayout

muqaddarmuqaddar Administrateur
juin 2014 modifié dans Xcode et Developer Tools #1

Salut,


 


J'ai un drôle de bug: j'ai fait ce test sous Xcode 6 et Xcode 5.


 


Dans une UITableViewCell personnalisée (dans son xib), il m'est impossible de connecter mes outlets dès que j'active Autolayout !


 


Je vous ai fait une vidéo:


http://www.pixyapps.com/temp/bug.mov


 


Inutile de vous dire que je ne vois pas le rapport...


 


EDIT: jai refait un Xib vierge avec sous-classe de UItableViewCell et j'ai exactement le même comportement. Je vous invite à  essayer.


 


 


EDIT2: j'ai le même contenu dans UICollectionViewCell custom, et je n'ai pas ce problème lié à  l'activation d'autolayout !


Réponses

  • muqaddarmuqaddar Administrateur

    Bon, je vous ai fait un petit projet test.


     


    Dans TableViewCell.xib, essayez de connecter mon outlet testImageView... puis désactivez l'autolayout, et réessayez !


     


  • Ca marche très bien si tu split ton écran de sorte à  afficher le .h. Ensuite tu fais un lien de l'élément de ton xib vers l'outlet défini dans le .h (en fait je fais toujours comme ça).


  • muqaddarmuqaddar Administrateur


    Ca marche très bien si tu split ton écran de sorte à  afficher le .h. Ensuite tu fais un lien de l'élément de ton xib vers l'outlet défini dans le .h (en fait je fais toujours comme ça).




     


    Merci, c'est une parade en effet.


    Mais sais-tu pourquoi je ne peux pas connecter dans le Xib directement ? Bug Xcode ?

  • Joanna CarterJoanna Carter Membre, Modérateur

    C'est à  cause que l'autolayout prenne le contrôle de Ctrl-drag pour connecter les contraintes. Si tu faisais un clic droit sur la cellule, tu pourrais choisir l'outlet du popover et dragger depuis là  jusqu'à  la composante souhaitée.


  • muqaddarmuqaddar Administrateur


    C'est à  cause que l'autolayout prenne le contrôle de Ctrl-drag pour connecter les contraintes. Si tu faisais un clic droit sur la cellule, tu pourrais choisir l'outlet du popover et dragger depuis là  jusqu'à  la composante souhaitée.




     


    Oui, ça marche aussi.


     


    C'est un comportement étrange car je n'ai pas ce problème dans aucun de mes autres Xibs, juste les Xibs qui ont une sous-classe de UITableViewCell customizée.



  • Mais sais-tu pourquoi je ne peux pas connecter dans le Xib directement ? Bug Xcode ?




     


    Non désolé, j'en ai aucune idée !

  • Joanna CarterJoanna Carter Membre, Modérateur
    juillet 2014 modifié #8


    Oui, ça marche aussi.


     


    C'est un comportement étrange car je n'ai pas ce problème dans aucun de mes autres Xibs, juste les Xibs qui ont une sous-classe de UITableViewCell customizée.




    N'oublies pas qu'une cellule est une composante visuelle. Le plupart de temps on connecte les outlets depuis un contrôleur, qui ne soutien pas les contraintes.


     


    Il me paraà®t que, lors de l'arrivée d'autolayout, Apple a dû decider ce qu'il faut faire avec le geste Ctrl-drag, et elle a décidé que, lorsqu'on commence le drag depuis une composante visuelle, ça invoque une contrainte ; par contre, lorsqu'on commence depuis quelque chose non-visuel, comme contrôleur, ça invoque un lien pour connecter un outlet. Qu'est-ce qu'elle a pu faire d'autre ?


  • AliGatorAliGator Membre, Modérateur
    C'est vrai que le comportement que tu décris Alex semble bizarre, mais je pense que Joanna Carter détient la vérité ;-)
  • muqaddarmuqaddar Administrateur

    OK, mais alors, si on veut être logique jusqu'au bout, ce comportement n'est pas le même dans une sous-classe de UICollectionViewCell... (pas de problème avec le ctrl-drag pour tirer les outlets après mise en place de l'autolayout).


  • Joanna CarterJoanna Carter Membre, Modérateur


    OK, mais alors, si on veut être logique jusqu'au bout, ce comportement n'est pas le même dans une sous-classe de UICollectionViewCell... (pas de problème avec le ctrl-drag pour tirer les outlets après mise en place de l'autolayout).




     


    T'es sûr ? Je viens d'en essayer et j'ai trouvé le même comportement qu'avec une sous-classe de UITableViewCell. Ctrl-drag depuis la cellule vers un bouton invoque le popup pour choisir une contrainte, pas un outlet

  • muqaddarmuqaddar Administrateur


    T'es sûr ? Je viens d'en essayer et j'ai trouvé le même comportement qu'avec une sous-classe de UITableViewCell. Ctrl-drag depuis la cellule vers un bouton invoque le popup pour choisir une contrainte, pas un outlet




     


    Tu as raison. On peut choisir une contrainte, mais pas un outlet.


     


    Donc j'en reviens à  mon problème: dans mon exemple et ma vidéo: on ne peut choisir NI une contrainte, NI un outlet pour une UITableViewCell custom: rien ne se surligne. C'est là  où je voulais en venir depuis le début.

  • Joanna CarterJoanna Carter Membre, Modérateur
    juillet 2014 modifié #13


    Donc j'en reviens à  mon problème: dans mon exemple et ma vidéo: on ne peut choisir NI une contrainte, NI un outlet pour une UITableViewCell custom: rien ne se surligne. C'est là  où je voulais en venir depuis le début.




     


    Je crois que c'est parce que il est impossible de mettre une contrainte depuis la cellule, n'importe quoi la sous-composante. Il faut, par contre, commencer les contraintes depuis le ContentView.


     


    Récapitulatif...


     


    1. Sans autolayout


     


    Pas de contraintes - donc on peut ctrl-draguer pour faire les outlets.


     


    2. Avec autolayout


     


    a. Ctrl-drag en provenance d'une composante non-visuelle - c'est comme N° 1


     


    b. Ctrl-drag en provenance du plupart des composantes visuelles - il faut choisir entre créer une contrainte ou un outlet, donc on doit faire un clic-droit.


     


    c. Ctrl-drag en provenance d'une cellule - ce n'est pas possible de faire les contraintes mais on est obligé, pourtant, pour sélectionner les outlets, de faire le choix en faisant le clic-droit - drôle mais tout de même la vérité :-)


  • muqaddarmuqaddar Administrateur


    c. Ctrl-drag en provenance d'une cellule - ce n'est pas possible de faire les contraintes mais on est obligé, pourtant, pour sélectionner les outlets, de faire le choix en faisant le clic-droit - drôle mais tout de même la vérité :-)




     


    Il y avait sûrement moyen de faire plus simple... Et puis, ce n'est pas les touches qui manquent pour relier outlets ou contraintes ou autre...etc, de sorte à  ce que le comportement ne change pas en fonction du contexte.


     


    Merci.

Connectez-vous ou Inscrivez-vous pour répondre.