Définition de la sortie / action pour le controller de vue

J'ai un UIButton dans un controller de vue qui n'est pas le controller de vue racine dans mon application. Je ne peux pas faire glisser et créer une sortie ou une action pour cela dans mon file d'en-tête. Je peux seulement le faire à partir du controller de vue racine.

Y a-t-il une raison simple à cela?

Lors de l'utilisation du storyboard, XCode crée uniquement les files .h et .m pour le premier controller de vue (nommé ViewController.h et ViewController.m).

Pour chaque controller de vue supplémentaire que vous ajoutez via Interface Builder, vous devez append manuellement des files de class personnalisés supplémentaires afin de personnaliser le controller de vue.

Une fois que vous avez ajouté un controller de vue à votre story-board via Interface Builder, suivez ces instructions:

  1. Dans le menu principal XCode, select Fichier, Nouveau, Fichier, puis choisissez Classe Objective-C et click Suivant. Nommez la class personnalisée et select le type approprié pour le controller de vue que vous avez ajouté (c.-à-d. Sélectionnez UITableViewController pour un controller de vue de table).
  2. Dans le Générateur d'interface de XCode, select le nouveau controller de vue et dans l'onglet Inspecteur d'identité, définissez la class sur la nouvelle class que vous venez de créer.

Vous devriez alors être en mesure de faire un CTRL-clic glisser n'importe quel UIButtons ou d'autres éléments d'interface user sur le nouveau file .h ou .m et implémenter n'importe quel comportement personnalisé pour la vue là.

Si vous ne créez pas de files pour implémenter vos classs personnalisées, vous êtes bloqué avec les classs d'interface user par défaut comme UIViewController , qui n'ont leurs comportements par défaut que si vous les UIViewController avec des classs personnalisées.

Vous voulez généralement un file .m et .h par controller de vue.

Essayez-vous de glisser dans le file d'en-tête pour ce viewController? Je suppose que vous utilisez un story-board pas Xibs? Je pense que nous avons besoin de plus de détails. Une capture d'écran peut-être?

On dirait que votre assistant est sur la mauvaise vue. Vous pouvez modifier cela dans le drop down menu en haut à gauche de l'affichage de l'assistant pour qu'il corresponde au file d'en-tête correspondant à ce controller de vue. Mais comme je l'ai dit, nous avons besoin de plus de détails.

Vous pouvez connecter l'UIButton à une prise définie dans le cadre du controller de vue.

Si vous faites également de cette sortie une propriété, vous pouvez exposer et mettre ce button à la disposition d'autres controllers de vue pour définir / get / query / etc. Cette dernière chose ne fonctionnera que si le controller de vue button-hébergement existe en memory (ce qui ne sera pas, au less initialement, en supposant que le controller de vue dans lequel le button est visible n'apparaît pas en même time que le premier controller est visible) .

Oui, il y a une raison simple à cela, bien qu'il soit difficile de dire dans votre cas exactement quelle est cette raison simple, puisque vous ne fournissez pas assez d'informations. Fondamentalement, tout se résume à la façon dont les controllers de vue fonctionnent et comment ils sont chargés / instanciés à partir d'un storyboard. La version courte:

  • Vous pouvez faire une sortie / action uniquement entre des objects dans la même "scène".

  • Une sortie / action est compliquée: vous ne pouvez en créer qu'une s'il y a un IBOutlet / IBAction correspondant dans le code. Xcode peut aider à créer cela dans le cadre du process de création de sortie / action, mais cela masque simplement le fait qu'il y a deux choses, l'IBOutlet / IBAction dans le code, et la sortie / action dans la plume / storyboard.

Vous pourriez être aidé plus loin en lisant le chapitre de mon livre sur la façon dont les plumes fonctionnent vraiment:

http://www.apeth.com/iOSBook/ch07.html#_nib_loading_and_file_8217_s_owner

Cela s'applique également aux storyboards, qui ne sont en fait qu'un moyen de combiner plusieurs plumes en un seul file. Les story-boards ajoutent cependant quelques complications, car il existe un autre type de chose que vous pouvez faire glisser entre les objects, à savoir une relation ou un segue (et il se peut que vous en ayez accidentellement créé un):

http://www.apeth.com/iOSBook/ch19.html#_storyboards

Assurez-vous que le propriétaire du file NIB est défini sur la bonne class. Sélectionnez le propriétaire du file dans Interface Builder et assurez-vous que la class correcte est définie dans l'onglet Inspecteur d'identité :

entrez la description de l'image ici