web-dev-qa-db-fra.com

Comment lier un fichier .xib à un fichier de classe avec Xcode 4

ont commencé un projet universel sous le nouveau Xcode4. Mon application fonctionne sur les appareils iPhone et iPad mais pas bien conçue pour l'iPad. J'ai 2 fichiers .xib pour MainWindow: MainWindow.xib (appareil iPhone) et MainWindow-Ipad.xib (appareil iPad). Mais un seul fichier .xib pour mon MainView: MainView.xib.

J'essaie donc de créer un fichier .xib spécifique pour le périphérique iPad:

Nouveau fichier> Interface utilisateur> Affichage -> suivant -> famille d'appareils: iPad -> MainView-iPad.xib -> enregistrer

Et bien sûr, il n'y a rien de connecté, pas de prise de référence, pas de lien vers une classe.

Je vérifie chaque miniature de mon nouveau MainView-iPad.xib afin de le lier à ma classe MainViewController sans succès!?

Où ou comment puis-je le lier à ma classe MainViewController? Merci d'avance.

29
user763308

La réponse correcte a été donnée par user763308:

Pour lier un .xib à une classe sous Xcode4:

  1. Ouvrez votre .xib.
  2. Dans l'espace réservé: sélectionnez Propriétaire du fichier.
  3. Dans la troisième vignette: "Inspecteur d'identité" du panneau de droite, modifiez le champ "Classe personnalisée" et entrez le nom de votre classe.

J'ai aussi dû ensuite:

  1. Cliquez sur la vue racine sous Objets.
  2. Cliquez sur le dernier onglet: "Afficher les connexions".
  3. Faites glisser "Nouvelle prise de référencement" vers "Propriétaire du fichier" et sélectionnez "afficher".
91
Viktor Nordling

Vous souhaitez créer une nouvelle sous-classe UIViewController, pas un nouveau fichier d'interface utilisateur. Cela créera votre .xib ainsi que les fichiers de classe (.m et .h). Le modèle est sous Cocoa Touch.

Vouloir établir un lien avec un contrôleur de vue existant n'est probablement pas une bonne idée. Si vous suivez le modèle de conception MVC (Model-View-Controller), vous avez vos classes de données et vos contrôleurs de vue séparés. Si vous le pouvez, déplacez les éléments hors de votre classe MainViewController et dans une classe de données qu'elle possède. Créez ensuite un autre contrôleur de vue pour iPad et faites-lui posséder une instance de votre classe de données que vous avez créée.

4
Tom Hamming

Il n'est pas nécessairement incorrect d'avoir un rapport 2: 1 de .xib à la classe de contrôleur dans le cas d'une application universelle. Voici le modèle que je suis:

Vous avez votre classe MainViewController. Vous avez 2 fichiers .xib: MainView-iPhone.xib et MainView-iPad.xib. Ces deux fichiers ont leur sortie "Propriétaire du fichier" définie sur MainViewController. Maintenant, pour m'assurer que le contrôleur de vue charge réellement la bonne interface et connecte toutes les bonnes prises en fonction de l'appareil sur lequel l'application s'exécute, je ferai quelque chose comme ceci:

MainViewController* controller = nil;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    controller = [[MainViewController alloc]initWithNibName:@"MainView-iPad" bundle:[NSBundle mainBundle]];
} else {
    controller = [[MainViewController alloc] initWithNibName:@"MainView-iPhone" bundle:[NSBundle mainBundle]];
}
/* Present the controller */

Maintenant, je dois également dire que ce n'est qu'une bonne idée s'il n'y a pas trop de chemins de code distincts qui doivent être suivis lorsqu'ils sont exécutés sur différents appareils. Si le comportement du contrôleur est plus spécialisé lors de l'exécution sur un iPad et un iPhone, il est préférable de résumer le comportement commun dans MainViewController, puis d'écrire deux sous-classes: MainViewController_iPhone et MainViewController_iPad. Chaque sous-classe charge ensuite le fichier .xib approprié et gère toutes les spécificités en interne. Dans ce cas, le code ci-dessus ressemblerait davantage à:

MainViewController* controller = nil;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    controller = [[MainViewController_iPad alloc] init];
} else {
    controller = [[MainViewController_iPhone alloc] init];
}
/* Present the controller */
1
Matt Wilding

Pour lier le .xib au fichier de classe, vous pouvez procéder comme suit: -

1) allez sur la vue de droite. 2) cliquez sur le troisième bouton et en ce que vous avez une ligne vous demandant la classe personnalisée, vous n'avez qu'à écrire le nom du fichier de classe que vous voulez qu'il soit lié.

pour créer les prises de référencement: -

1) vous pouvez copier toutes les sorties de l'iPhone .xib et le coller ici, puis faire glisser toutes les sorties vers le propriétaire du fichier, puis les connecter.

1
Kasaname