web-dev-qa-db-fra.com

Impossible de connecter IBOutlet dans Interface Builder

J'ai une expérience étrange. Je crée tout type d'application iPhone, ajoute un fichier UIViewController avec Xib. Je peux éditer le fichier xib avec des contrôles et les voir rendus si je cours. Maintenant, j'essaie d'ajouter quelques IBOutlets au contrôleur. Je les ajoute donc au fichier .h, puis synthétise le fichier .m. Ensuite, je me dirige vers Interface Builder pour connecter les prises. Je fais glisser UILabel vers UIView, puis j'essaie de connecter le propriétaire du fichier (qui est mon UIViewController personnalisé), mais tout ce que je peux sélectionner lorsque j'essaie de me connecter à UILabel est "view", ce qui est manifestement faux. Je ne peux donc pas connecter les IBOutlets à leurs contrôles dans Interface Builder.

Des idées?

24
haider

J'ai fait une combinaison des choses dans ce fil et j'ai finalement eu du succès.

Dans le générateur d'interface (pas xcode)

  1. Fichier-> Recharger tous les fichiers de classe
  2. Fichier-> Lire les fichiers de classe (sélectionnez MyClass.h)
  3. Reconnecter le propriétaire du fichier par
    une. Paramétrer la classe sur "MyClass"
    b. Reconnexion de la vue à la vue du propriétaire du fichier

Tout est revenu à la normale maintenant. Bizarre.

J'espère que cela aide plus que ça déroute ;-)

41
Kevin Fisher

Dans Interface Builder Fichier-> Lire les fichiers de classe, pointez-le sur la classe de son propriétaire. Cela a réglé le problème pour moi.

6
diatrevolo

Avait le même problème.

Corrigé en vérifiant l'attribut "Classe" de mon propriétaire de fichier sur l'inspecteur d'identité.

6
Suiz Uzcategui

Êtes-vous sûr que le propriétaire du fichier est correctement défini sur votre UIViewController personnalisé et que vous avez enregistré votre fichier .h après avoir ajouté le mot clé IBOutlet à la variable d'instance et property?

4
Ben S

Vous êtes-vous assuré de bien définir vos points de vente dans votre fichier .h? Si vous essayez de connecter un champ de texte dans IB, votre fichier .h devrait ressembler à quelque chose comme ...

IBOutlet UITextField    *MyTextField;

Assurez-vous que le type est UITextField (ou UITextView, etc.). Si vous les tapez en tant que NSString ou qu’ils ne soient pas appropriés, vous ne pouvez pas les connecter dans Interface Builder ....

3
Michael

Si vous ne parvenez pas à connecter vos contrôles d'interface utilisateur à un code via un clic droit (ou CTRL) -> liste déroulante, il existe un autre moyen. Dans le Générateur d'interface, maintenez la touche CTRL et la souris du médicament enfoncées dans "File's Owner" dans la fenêtre principale d'Interface Builder et sur votre contrôle d'interface utilisateur (libellé, bouton, etc.). La liste dpopdown avec toutes les sorties que vous avez définies sera ajoutée. Juste le choix nécessaire un!

3
Luiza Charmberg

J'ai eu à peu près le même problème que vous. Je ne sais pas si vous avez déjà résolu votre problème, mais dans le mien, j'ai changé tous les noms des classes, y compris le contrôleur de vue, mais le nom du propriétaire du fichier reste inchangé. J'ai donc double-cliqué sur le propriétaire du fichier -> cliquez sur i dans la fenêtre ouverte -> changez le nom du champ Classe par le nouveau nom du contrôleur de vue. Ensuite, cela a fonctionné. Peut-être que vous voulez essayer à nouveau et voir si cela fonctionne. Bonne chance.

3
chepukha

J'ai eu le même problème pour le plus long. Changer le type de propriétaire de mon fichier en "MyClassViewController" au lieu de "UIViewController" dans la fenêtre Identité de classe a résolu mon problème. Cela a du sens car étant donné que le type de propriétaire du fichier est UIViewController, il ne montrera que les propriétés spécifiques à la classe de base. Changer le type en MyClassViewController donne accès à ses points de vente et à toutes les instances héritées. J'espère que cela t'aides!

3
Adrian

File->Read Class Files (select MyClass.h) A fait le travail pour moi.

2
Mr H

XCode -> Product -> Clean

Travaillé pour moi.

2
Michael

J'ai eu le même problème et j'ai juste essayé la suggestion de diatrevolo: cliquez sur Fichier, puis sur Lire les fichiers de classe, puis pointez sur la classe Propriétaire de votre fichier.

Cela a résolu le problème pour moi. Je voudrais +1 diatrevolo, mais je n'ai pas encore de réputation ...

1
martin jakubik

Pour moi, le problème était que j'avais créé une MyUITextView prolongeant la UITextView et que X-Code ne se connectait pas. Ma solution de contournement consistait à utiliser UITextView dans IBOutlet temporairement pour vous connecter/lier puis pour passer à ma vue personnalisée. 

Alors j'ai changé. 

IBOutlet MyUITextView *tv;

à 

IBOutlet UITextView *tv;

et ensuite connecté/lié. Une fois connecté, j'ai replacé mon OBOutlet sur MyUITextView.

IBOutlet MyUITextView *tv;
1
verma

me tue à chaque fois, mais parfois si vous fermez et rouvrez xcode, les choses sont corrigées ... Il m'est juste arrivé ce même problème ...

1
Lior Frenkel

Redémarrer Xcode 5.1 l’a fait pour moi.

1
tboyce12

Donc, je ne sais pas exactement pourquoi il ne crée pas automatiquement les connexions IBOutlet, mais j'ai trouvé une solution de contournement. J'ai dû ajouter manuellement les points de vente via la bibliothèque dans Interface Builder pour mon contrôleur de vue client. Si quelqu'un trouve le correctif pour le faire lire automatiquement à partir du fichier .h (comme il est supposé le faire), je serais très reconnaissant s'ils le postaient.

je vous remercie

0
haider

Je suis un débutant total à cela, et j'ai eu le même problème. Je suis allé essayer la suggestion de diatrevolo et, ce faisant, j'ai découvert la cause de mon problème. J'avais initialement créé mon ViewController quelque part au hasard dans la hiérarchie du projet, puis je les avais déplacés dans le dossier des classes. Cela signifiait que les fichiers eux-mêmes ne se trouvaient pas dans le dossier classes, mais le projet pensait qu'ils l'étaient. IB cherchait donc au mauvais endroit. J'ai déplacé les fichiers dans le fichier de classes avec le Finder, puis les ai supprimés et lus dans le projet. Ensuite, tout a fonctionné!

0
mk.

J'avais également des problèmes ici, et ce qui a finalement fonctionné pour moi a été de créer l'application avant d'ouvrir Interface Builder. Vaudou!

0
Jason

Une fois les fichiers XIB localisés, les vues ne réagissaient à aucune mise à jour effectuée dans Interface Builder. Solution simple était pour supprimer l'application du simulateur/appareil . Le prochain Build & Run a mis à jour correctement l'application.

Cela ne s'est produit que lors du déploiement de l'application via XCode sur le simulateur. On dirait que XCode essaie d'optimiser la construction et devient confus.

0
leviathan

J'ai écrit 

@IBOutlet weak var title: UILabel!

dans le fichier texte UIViewController puis connecté du fichier à l'étiquette du storyboard, et cela a fonctionné!

0
coolcool1994