2011-11-07 1 views
1

J'ai créé une vue « MyView » dans le fichier nib « MyNib » Ma question est de savoir comment créer un objet NSView en utilisant la vue NomComment créer une vue par programme dans MacOSX de cacao

J'ai une classe personnalisée pour mon WindowController. En utilisant l'Interface Builder, je ne suis pas capable de créer une sortie dans la classe mywindowController.

Donc, s'il n'y a aucun moyen de créer une sortie en utilisant le constructeur d'interface, quelle est l'autre façon de créer un NSVIew.

Merci à l'avance

Répondre

1

Avez-vous lu le documentation? Lorsque vous chargez des clocks/xibs, vous devez spécifier le propriétaire du fichier (l'objet de niveau supérieur dans le xib). Cela signifie tout objet que vous passez car le propriétaire doit avoir les points de vente désirés.

BOOL success = [NSBundle loadNibNamed:@"MyNib" owner:selfOrSomeControllerWithOutlets]; 

Ceci est le moyen le plus simple de charger le contenu d'un xib et de le connecter à n'importe quel propriétaire spécifié.

Vous pouvez également créer une instance de contrôleur et charger son xib en une fois. Par exemple, un contrôleur view/view peut être chargé par le contrôleur de fenêtre principal. A l'intérieur du contrôleur de fenêtre, vous pourriez avoir une méthode -widgetView (qui charge une vue à l'intérieur WidgetView.xib) qui fait cela:

- (NSView *)widgetView 
{ 
    if (!_widgetViewController) 
     _widgetViewController = [[MyWidgetViewController alloc] initWithNibName:@"WidgetView" bundle:nil]; 
    return [_widgetViewController view]; 
} 

Dans ce cas, MyWidgetViewController est une sous-classe NSViewController (ce qui lui confère une propriété -view Dans le fichier xib, le nom de la classe du propriétaire du fichier est défini sur MyWidgetViewController et sa sortie de vue est connectée à la vue de conteneur principale. La sortie (et tous les autres de votre sous-classe) est reconnectée et maintenant le contrôleur est connecté au contenu xib

Maintenant, la première fois que vous demandez -widgetView, il charge le xib et la main s retour la vue (ou nul). Chaque appel suivant remettra simplement la vue déjà chargée. C'est ce qu'on appelle le «chargement paresseux» et c'est généralement la meilleure façon d'obtenir des vues qui ne sont pas toujours utilisées. Vous pouvez également le faire pour plusieurs "copies". Ajoutez simplement chaque contrôleur de vue à un conteneur quelque part quand ils sont créés et gérez-le comme vous le souhaitez.

Bien sûr, le code ci-dessus ignore le risque que le xib ne puisse pas être localisé (dans ce cas -initNibNomNom: bundle: retournera zéro) et vous ne devriez pas le faire. Manipulez définitivement l'erreur en utilisant NSAssert ...() et terminez-la gracieusement (puisque quelque chose ne va probablement pas avec le paquet d'application si le xib est introuvable).

+0

Merci pour une belle explication – user970251

Questions connexes