web-dev-qa-db-fra.com

Impossible d'établir la connexion de sortie à une contrainte dans IB

J'utilise XCode 5 avec iOS 7. J'ai besoin de modifier dynamiquement la contrainte de hauteur d'un UITextView avant sa mise en page. J'ai vu de nombreux articles indiquant que cela peut être fait en établissant une connexion de sortie de la contrainte dans IB au code source. J'essaie d'établir la connexion depuis la sortie de contrainte dans IB vers le fichier d'en-tête de la classe propriétaire, mais je ne parviens pas à établir la connexion - IB ne "surligne" pas lorsque je fais glisser le fichier d'en-tête, comme lors de l'établissement de connexions à partir d'autres objets comme des boutons, etc.

Quelqu'un a-t-il déjà rencontré cela? Toute aide est grandement appréciée.

22
johnnyspo

Voici une photo de moi en train de le faire. Je fais glisser-déplacer la contrainte vers le fichier d'en-tête.

enter image description here

Dans la vraie vie, je suis plus susceptible de contrôler-faire glisser vers la catégorie anonyme dans le fichier d'implémentation, car je ne veux pas qu'une propriété IBOutlet soit publique. Voici donc une photo de cela aussi. Désolé, cette capture d'écran ne montre pas le curseur: elle se trouve en bas de la ligne d'étirement.

enter image description here

50
matt

Vous pouvez établir une connexion de sortie en:

  1. Ouvrez l'éditeur d'assistant, puis ctrl + faites glisser votre affichage de texte vers le fichier d'en-tête respectif. Vous devriez voir une propriété créée pour la vue de texte.

  2. Tapez manuellement @property(nonatomic,retain)IBOutlet UITextField *yourTextField;. Ouvrez l'éditeur d'assistant, faites glisser le petit cercle vide (de gauche à la propriété) vers le contrôle correspondant dans votre contrôleur de vue.

Si vous ne parvenez toujours pas à établir la connexion, nettoyez, enregistrez votre projet, puis réessayez.

2
motox

Essayez-vous de créer la connexion dans une classe UIView? Il semble que vous ne pouvez créer qu'une connexion dans la classe UIViewController associée à cette scène dans votre Storyboard.

Votre solution de contournement est donc probablement la bonne chose si vous souhaitez le faire à partir de la vue elle-même.

1
David

Je pense que je suis en retard pour cette réponse, mais cela vaut peut-être la peine de l'écrire. J'avais un problème similaire. Je n'avais pas configuré correctement le propriétaire du fichier pour la vue. Vous pouvez faire un test simple en utilisant éditeur assistant . Si l'éditeur assistant ne vous laisse pas choisir la sélection automatique pour le contrôleur de vue, cela signifie que vous n'avez pas configuré correctement le propriétaire du fichier. Vérifiez que le viewcontroller porte le même nom que le fichier .xib (c'est souvent le cas).

Cela vous permettra de connecter tous vos IBOutlets, y compris les contraintes.

1

Ok, ne peut toujours pas établir de connexion avec la contrainte dans IB. Cependant, j'ai contourné le problème en faisant de la contrainte de hauteur de la vue texte un espace réservé dans IB que je remplace par une NSLayoutConstraint que je crée dans initWithCoder de la vue. Je conserve une référence à la contrainte créée et modifie sa propriété "constante" selon les besoins.

Je vais probablement m'en tenir à cette solution de contournement, mais si quelqu'un peut m'aider avec le problème d'origine, ce serait grandement apprécié.

0
johnnyspo