Xcode 6 et 5: impossible de connecter les outlets sur une UITableViewCell après Autolayout
muqaddar
Administrateur
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 !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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).
Merci, c'est une parade en effet.
Mais sais-tu pourquoi je ne peux pas connecter dans le Xib directement ? Bug Xcode ?
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.
Non désolé, j'en ai aucune idé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 ?
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
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.
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é :-)
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.