web-dev-qa-db-fra.com

Impossible de créer des connexions de sortie vers des sous-vues dans Interface Builder (Xcode 5)

Je sais que cela semble être un double de certaines autres questions, mais les réponses ne fonctionnent pas pour moi.

  1. J'ai créé une application à vue unique.
  2. Dans le storyboard, j'ai ajouté une sous-vue à ma vue principale.
  3. J'ai une étiquette sur ma vue principale et une autre étiquette sur ma sous-vue.
  4. J'ai créé une classe de type UIView et l'ai ajoutée en tant que classe personnalisée pour la sous-vue.
  5. Je peux ctrl-glisser mon étiquette sur ma vue principale vers la classe de contrôleur de vue principale. Mais lorsque j'essaie de faire glisser Ctrl mon étiquette sur ma sous-vue vers ma classe personnalisée, je ne parviens pas à établir la connexion.
  6. J'ai même tapé les informations de la propriété et essayé de faire la connexion manuellement en vain.

Les choses ont un peu changé dans la dernière version d'Interface Builder de Xcode. Quelqu'un peut-il me dire ce qui me manque? Il n'y a littéralement aucun code ici. Je teste simplement la connexion de prises à une sous-vue avec une classe personnalisée.

La première image montre que j'ai configuré la classe personnalisée et ajouté une propriété mais je ne peux pas établir la connexion.

Main view and subview in Interface Builder - custom class is set

La deuxième image montre que l'étiquette de la vue principale est connectée dans le contrôleur de la vue principale.

Main view and subview in Interface Builder - main view's label is connected

La troisième image montre qu'il n'y a pas de connexions de sortie pour l'étiquette de la sous-vue.

Main view and subview in Interface Builder - cannot connect subview's label

49
Patricia

Vous pouvez écrire manuellement la déclaration de propriété IBOutlet dans le @interface de la sous-classe de vue personnalisée, et en supposant que vous avez défini la classe de base de votre sous-vue dans IB, vous pouvez alors faire glisser le cercle de sortie du code vers le contrôle de la scène.

enter image description here

Ou, comme vous le faites remarquer, Warren Burton a suggéré à la fois cette technique et une autre dans sa réponse à cette autre question, Can't Wire to Subview in IB .

119
Rob

Le problème est lié au propriétaire du fichier du View Controller. Il est probablement configuré comme étant IOViewController, vous ne pouvez donc établir des connexions de propriété que dans ce fichier .h.

Ce que vous pouvez faire, c'est créer un autre fichier .nib pour la sous-vue et y placer la sous-vue. Ensuite, dans ce fichier .nib, définissez le propriétaire du fichier IOSubview. Les connexions de propriété fonctionneront très bien là-bas. Ensuite, ajoutez simplement la sous-vue à votre IOViewController par programme. N'oubliez pas de charger le fichier nib à partir du bundle en premier.

4
Choppin Broccoli

Voici ce que j'ai fait (dans Swift):

  • J'ai créé un nouveau ViewController (par exemple, la classe MyViewController: UIViewController {})
  • Dans StoryBoard, j'ai développé les `` scènes '' (c'est-à-dire l'arborescence de tous les composants de l'interface utilisateur) et sélectionné `` MyViewController ''
  • En utilisant l '"inspecteur d'identité", j'ai affecté la classe "MyViewController" (contrairement à UIViewController par défaut)

Après cela, j'ai pu assigner une action.

Je soupçonne que pour Obj-C, c'est un processus similaire.

3
goggelj

Vous ne créez pas de prises dans la sous-classe, vous créez la sortie sur le contrôleur de vue sur lequel il se trouve. Tu dois #import la sous-classe dans IDViewController.h et y créer une sortie.

IDViewController.h

#import "IDSubclass.h"
...
@property (strong, nonatomic) IBOutlet IDSubclass *outletName;
1
Josue Espinosa

Zoomez votre storyboard à 100%. Si vous effectuez un zoom arrière, pour dire 50%, la connexion de sortie ne fonctionnera pas.

0
Makku