web-dev-qa-db-fra.com

Storyboard uiviewcontroller, la 'classe personnalisée' n'apparaît pas dans le menu déroulant

J'ai un UIViewController que j'ai créé dans le storyboard de mes applications, ainsi qu'une sous-classe UIViewController personnalisée que j'ai ajoutée au projet (et qui est correctement en phase de compilation pour ma cible). Cependant, lorsque je vais définir la propriété 'Custom Class' sur le contrôleur de vue dans Storyboard, ma classe personnalisée n'apparaît pas dans la liste.

  • Vérifié que la classe fait partie de la cible de mon application, pas de tests
  • Double vérification qu'il s'agit bien d'une sous-classe de UIViewController
  • Programme compilé juste pour s'assurer que xcode fonctionnait avec les dernières informations
  • Xcode redémarré

Qu'est-ce qui empêcherait ma classe de figurer dans la liste déroulante "Classe personnalisée"?

59
1dayitwillmake

J'ai trouvé deux manières de résoudre le problème, mais ce sont des solutions de rechange. 1. Tapez simplement le nom des contrôleurs de vue dans le champ de texte, ou 2. fermez le projet, puis rouvrez-le et place le fichier dans la liste lors de l'initialisation du projet.

42
ejkujan

Si vous avez toujours votre problème ou pour ceux qui pourraient avoir le même problème:

Assurez-vous de sélectionner sur votre storyboard votre "ViewController" au lieu de votre "View" (qui est automatiquement sélectionné lorsque vous cliquez sur la vue dans le storyboard). La différence entre ces deux solutions est que, lorsque le contrôleur de vue est sélectionné, un rectangle bleu apparaît autour de votre application. Pour être sûr de sélectionner le contrôleur de vue, ouvrez le plan du document et sélectionnez-le directement dans la hiérarchie du storyboard.

enter image description hereenter image description hereenter image description here

41
Bobinoh

Je voudrais essayer ce qui suit:

  1. Vérifiez que le fichier implémentant la classe fait partie de phases de construction (vérifiez sous cible> phases de construction)
  2. Ajouter le .m fichier dans phases de construction (si ce n'est déjà fait).
  3. Redémarrez Xcode.
12
tiguero

Vous pouvez résoudre ce problème en modifiant le code XML de votre Storyboard.

  1. Cliquez avec le bouton droit sur votre My.storyboard dans le panneau Navigateur de projet et sélectionnez le menu Ouvrir comme-> Code source. Recherchez votre entrée de contrôleur de vue dans le XML et ajoutez l'attribut customClass="MyController".

  2. Enregistrez le storyboard.

  3. Cliquez avec le bouton droit sur votre My.storyboard dans le panneau Navigateur de projet, puis sélectionnez de nouveau le menu Ouvrir en tant que -> Interface Builder - Storyboard.

L'entrée de classe personnalisée contiendra désormais votre nom de classe MyController.

11
Bill Hollings

Assurez-vous que votre classe hérite de UIViewController.

@interface ClassName : UIViewController
6
mikeborgh

Dans Xcode 8, certaines de mes classes avaient le mauvais chemin (sensible à la casse) spécifié pour leurs emplacements de fichiers.

MyProject/mysubdirectory/MyViewController.xib (.m, .h)

contre:

MyProject/MySubdirectory/MyViewController.xib (.m, .h)

Je ne savais vraiment pas comment cela avait abouti dans cet état, mais mon projet présentait exactement le même comportement que ci-dessus (aucun point de vente/action ne s'affiche dans IB), et la correction de ce chemin a résolu le problème.

J'ai corrigé cela de deux manières différentes. Une façon était par j'ai ouvert le fichier .pbxproj et en corrigeant le problème sensible à la casse manuellement. L'autre méthode qui a fonctionné a été en appuyant sur l'icône de dossier sous la section Identité et Type de l'onglet Inspecteur de fichier du fichier, puis en sélectionnant à nouveau le fichier.

4
Matt Foley

J'avais les mêmes problèmes que ceux décrits dans ce problème. Cependant, aucune des réponses suggérées ne le corrige pour moi. Mon projet a été correctement compilé, sans avertissements ni erreurs, mais dans le fichier .h, aucun indicateur de "sortie" n’indiquait que mes sorties avaient été liées à des éléments de scénario.

En outre, les tentatives de création de nouveaux points de vente dans mon code, en faisant un clic droit et en les faisant glisser dans mon fichier d'en-tête, ne reconnaissaient pas la source de mon en-tête comme cible potentielle de cette opération. De plus, ma classe n'a pas fait son apparition dans le menu déroulant Custom-Class du panneau d'inspecteur de propriétés de ViewController.

Et pourtant, le projet s'est bien déroulé.

Un examen plus approfondi a montré que j'avais défini ma propre classe de la manière suivante ...

@interface KJBMainDataViewTrackConMk2<UIScrollViewDelegate> : UIViewController

qui apparemment compile bien.

Mais, si ceci est modifié comme suit, (en déplaçant les protocoles à la fin) ...

@interface KJBMainDataViewTrackConMk2 : UIViewController<UIScrollViewDelegate>

Ensuite, tout reprend vie. Tous les points de vente sont soudainement indiqués comme étant "connectés" à un élément de scénario. Et le fait de cliquer avec le bouton droit de la souris commence à fonctionner à nouveau et ma classe personnalisée apparaît dans la liste déroulante des classes personnalisées du panneau de l'inspecteur de propriétés pour le storyboard ViewController!

Les autres réponses ici représentent probablement les causes les plus probables de cette maladie, mais j’ai jugé utile de mentionner au moins cette autre cause potentielle.

3
KJBoffo

Cliquez sur un autre contrôleur de vue dans le scénario, puis cliquez sur sa liste déroulante de classe personnalisée pour confirmer que la nouvelle classe est répertoriée, mais ne la sélectionnez pas. Cliquez de nouveau sur le nouveau contrôleur de vue que vous avez créé et vous devriez le voir maintenant répertorié dans son menu déroulant de classe personnalisée. étrange, hein? force juste un rafraîchissement je pense.

2
sirhcmcd

Dans mon cas, je glisse un nouvel objet TableViewController vers le storyboard, mais j'ajoute un nouveau fichier dont la sous-classe est "UIViewController" .... Ensuite, j'ajoute un fichier dont la sous-classe est "UITableViewController", le problème est résolu !!

2
heyjude

J'ai eu le même problème, mais aucune des autres solutions n'a fonctionné pour moi. Le problème pour moi était que j'avais une cible Mac et iOS, toutes deux avec leurs propres versions du même contrôleur de vue. Par exemple, j'avais une paire de fichiers .h/.m nommée FooViewController pour Mac et une autre paire de fichiers .h/.m nommée FooViewController pour iOS. Chaque paire était correctement incluse avec leurs cibles respectives, mais pour une raison quelconque, Xcode ne l'aime pas et mon contrôleur de vue ne s'afficherait pas dans la liste déroulante Classe personnalisée du contrôleur de vue du storyboard. J'ai fini par renommer ma classe dans le contrôleur de vue iOS et il s'est immédiatement affiché dans la liste déroulante.

2
Chris Livdahl

Pour ceux d’entre vous qui rencontrent toujours ce problème après avoir tout essayé, c’est probablement parce que vous avez cliqué sur View au lieu de ViewController.

Vous devez choisir le fichier lorsque vous cliquez sur ViewController.

Cela a résolu mon problème.

enter image description here

1
Backrub32

Il m'est arrivé de rencontrer ce problème et je n'ai pas eu de chance après avoir essayé les suggestions précédentes. Enfin, j'ai trouvé la raison en est que le type du fichier d'en-tête est défini sur C++ header. Après l'avoir changé en C header (comme tous les autres fichiers d’en-tête), la classe apparaît dans la liste déroulante. Je ne sais pas pourquoi cependant ... Peut-être utile pour les autres, alors je le poste ici.

1
grapeot

aucune de ce qui précède (ou ci-dessous :) m'a aidé. si j'ai trouvé que

  1. après avoir ajouté un nouveau viewcontroller au storyboard (juste en le faisant glisser)
  2. et en ajoutant ma classe par File\New\File\Objective-C Class, donnez-lui un nom, pas de XIB, Next, Create

si je sélectionne mon contrôleur de vue dans le story-board et que j'essaie de l'assigner à ma classe, ma classe n'y est pas

MAIS

si je clique sur une vue se trouvant dans le contrôleur de vue lui-même, cliquez sur un menu déroulant de classe dans la classe personnalisée

ET ALORS

sélectionnez viewcontroller (cliquez sur une barre située sous le viewcontroller), puis cliquez à nouveau sur une liste déroulante de classes dans Custom Class. Ma classe nouvellement ajoutée s'affiche par magie.

bizarre, doit être un bug avec rafraîchissant. Xcode version 5.1 (5B130a)

0
Boris Gafurov

Assurez-vous de sélectionner le contrôleur de vue auquel vous souhaitez attacher votre classe. La solution de facilité est ouverte Document Outline et choisissez votre contrôleur de vue (lorsque vous appuyez dessus, il ne choisit parfois pas simplement l’objet que vous vouliez dire).

0
Mike.R

Ce qui a fonctionné pour moi a été de cliquer sur le fichier dans le navigateur de projet, puis dans l'inspecteur de fichiers sous "Identité et type" sous la liste déroulante "Emplacement", de cliquer sur la petite icône de dossier, puis de sélectionner le fichier dans la fenêtre contextuelle. .

0
Micah333

Dans mon cas, j'ai sélectionné la mauvaise interface utilisateur .. j'ai donc supprimé le fichier de classe, en ai créé un nouveau et sélectionné la classe parente correcte.

0
KawaiKx

Pour les projets macOS, la création d'une nouvelle classe a généré une classe héritant de NSObject à la place de NSViewController.

Changer de

import Cocoa

class AppsViewController: NSObject {

}

à

import Cocoa

class AppsViewController: NSViewController {

}
0
fitzmode

Essayez de nettoyer votre projet et redémarrez votre Mac. Une chose particulière que j'ai faite a été de changer tous les noms de classes personnalisées et de reconstruire le projet. Ça a marché!

0
Matheus Faleiro

pour mon cas, les ressources groupées ont en quelque sorte été supprimées, alors j'ai rajouté et j'ai travaillé!

Phases de construction -> Ajouter une phase de construction -> Copier les ressources du bundle trouver votre fichier Ensuite, faites-y glisser votre fichier

Assurez-vous ensuite que votre adhésion cible est cochée.

0
CodeOverRide

Je devais redémarrer XCode 7.3 (7D175)

0
Sven Holzinger

assurez-vous initialement de ne pas ajouter CustomViewController à un groupe ou à un dossier. placez-le à la racine de votre application.

0
Hashem Aboonajmi

Storyboard recherche la classe personnalisée, mais physiquement, il n'y a pas de différence et il n'affiche pas le nom de la classe personnalisée dans la liste ni les points de vente. La solution suivante a parfaitement fonctionné pour moi.

  1. Copiez simplement votre code à un autre endroit (disons sur le bureau).
  2. Ouvrez votre code existant.
  3. Supprimer le fichier de classe personnalisé. (Déplacer vers la corbeille)
  4. Maintenant, ajoutez des fichiers du dossier du projet copié (à partir du bureau)
  5. N'oubliez pas de cocher la case "Copier si nécessaire"
  6. Ouvrez le scénario et le bingo, vous obtiendrez vos fichiers de classe personnalisés dans une liste déroulante.
0
Nandy