Interface Builder. Comment remplacer des contrôleurs de vue programmatiques par des contrôleurs IB View?

StackOverflow https://stackoverflow.com/questions/1601835

Question

À mesure que je déplace de plus en plus de ma construction d'interface utilisateur de XCode à IB, il me reste un obstacle à surmonter.

Actuellement, je crée mes viewControllers personnalisés dans XCode avec des initialiseurs personnalisés. Ils ont généralement beaucoup d'ivars qui sont définis lors de l'initialisation via les paramètres passés. J'aimerais vraiment déplacer le plus possible tout cela vers IB.

Quelqu'un pourrait-il m'expliquer soigneusement - ou, mieux encore, m'indiquer du code - comment reproduire l'approche XCode consistant à transmettre des paramètres via un initialiseur personnalisé dans IB - probablement via IBOutlet.

Merci d'avance.

Salut, Doug

MISE À JOUR:

Un scénario typique est que mon AppDelegate va sur le réseau, récupère des données - NSMutableData, puis passe une référence à un viewController racine - généralement un TableViewController - qui est poussé sur la pile viewController d'un navigationController.

Lorsqu'une cellule est sélectionnée, un secondViewViewController est alloué / initié et un sous-ensemble des données lui est transmis. Le secondViewController va sur le réseau pour un peu plus de données, construit une hiérarchie de vues, transmet des bits des données extraites à chaque sous-vue, puis chaque sous-vue est envoyée par message à setNeedsDisplay pour traiter les données.

C’est cette transmission hiérarchique de données que je souhaite transmettre à IB est possible.

Était-ce utile?

La solution

Vous pouvez toujours avoir un initialiseur personnalisé. Cependant, à l'intérieur de cette initialisation, vous appellerez - [initWithNibName: @ " yourNibName " bundle: bundle] . Vous allez connecter vos variables d'instance liées à UIKit ( UILabel , UIButton , etc.) dans le générateur Interface et vous n'aurez donc pas à instancier ces objets. dans votre initialiseur. D'autres variables d'instance (chaînes, dictionnaires, objets personnalisés, etc.) que vous instancierez et définissez dans votre initialiseur.

N'oubliez pas non plus que la manipulation de vos variables liées à UIKit telles que la définition du texte de l'étiquette ou la position d'un UIView , doit être effectuée dans le code viewDidLoad car ces objets n'ont peut-être pas été entièrement créés au moment de l'exécution de l'initialiseur.

Faites-moi savoir si vous avez besoin de plus d'informations.

Autres conseils

Disons que nous avons MyViewController qui étend UIViewController et MyViewControllerParameter, qui est l'un de nos objets personnalisés que nous transmettons à MyViewController lors de l'initialisation. MyViewController a un IBOutlets de type MyViewControllerParameter défini dans celui-ci. Nous voulons placer MyViewController dans une autre vue contenant, ParentView.xib. ParentView.xib appartient à ParentViewController.m et est créé ailleurs. Nous double-cliquons sur ParentView.xib dans XCode pour lancer Interface Builder. Nous faisons ensuite glisser un " objet " à partir de la vue de la bibliothèque (je crois que vous ouvrez la vue de la bibliothèque avec Cmd + Maj + L si elle n’est pas ouverte par défaut) dans la fenêtre du document. (Ceci est la fenêtre activée par Cmd + 0.)

Un " objet " est un widget arbitraire trouvé dans la bibliothèque (identifié par une icône de cube en or massif) pouvant représenter tout ce qui se trouve dans votre projet. Après avoir placé le nouvel objet dans la fenêtre du document, nous tapons Cmd + 4 pour ouvrir la fenêtre Inspecteur d'indentité. Dans le champ de texte supérieur, vous pouvez saisir le nom de notre paramètre de contrôleur de vue, "MyViewControllerParameter". Ensuite, nous trouvons le widget ViewController dans la bibliothèque et le déposons dans la fenêtre du document. Nous ouvrons l'inspecteur d'attributs (Cmd + 1) et définissons le nom de la plaquette sur "MyView.xib". Cela devrait amener CocoaTouch à charger MyViewController à l’aide des définitions de "MyView.xib".

Ouvrez l'inspecteur d'identité et définissez l'attribut de classe sur MyViewController. Enfin, cliquez avec le bouton droit de la souris ou cliquez avec le bouton droit de la souris (ou si vous appuyez deux doigts si nous avons correctement configuré le trackpad sur notre MacbookPro) MyViewController dans la fenêtre du document. Cela ouvrira une fenêtre montrant tous les IBOutlets dans MyViewController. Faites glisser une ligne du petit cercle ouvert à côté de la sortie MyViewControllerParameter et déposez-la sur l'objet MyViewControllerParameter situé dans la fenêtre du document. La connexion de ces points permet de définir les paramètres entre les objets à l'aide du générateur d'interface.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top