Travailler avec des fenêtres de l'interface dans le cacao

Peut-être l'élément le plus important de toute application basée sur GUI-est de la fenêtre. En fait, il est si important que les gars de Redmond a utilisé pour nommer leur système d'exploitation. Les fenêtres d'une application sont comme des morceaux de papier que vous utilisez pour recueillir des idées, des informations d'affichage, et l'entrée d'enregistrement.

Sommaire

Fenêtres à Cocoa sont tout aussi importants. Mac OS X continue en utilisant la fenêtre de belles traditions qui ont fait le célèbre Mac OS. Pendant tout ce temps, Cocoa exploite et améliore les idées du passé avec de nouvelles fonctionnalités intéressantes.

Parce que les fenêtres forment la base pour presque tous les interfaces, vous les utilisez souvent. Certaines des fonctions les plus courantes que vous allez effectuer sont les suivantes:

  • Ouverture et fermeture des fenêtres
  • Fenêtres Déménagement
  • Ajout de fenêtres pour le menu de Windows

Dans cet article, vous découvrirez comment accomplir toutes ces tâches et plus encore.

L'ouverture et la fermeture d'une fenêtre

Lorsque vous travaillez avec des fenêtres dans vos projets de cacao, vous aurez généralement utilisez Interface Builder pour les concevoir. En outre, si vous laissez une fenêtre ouverte dans Interface Builder lorsque vous concevez votre interface, cette fenêtre volonté est affiché lorsque votre application fonctionne. Par conséquent, il est souvent inutile d'émettre une commande pour ouvrir une fenêtre.

Fermeture d'une fenêtre est une simple question:

[theWindow fermer];

Lorsque vous fermez une fenêtre dans ce mode, la fenêtre est parti. Son contenu est disparu de la mémoire. Il est pas plus. Cela signifie que pour voir à nouveau la fenêtre, vous devez ouvrir un nouvel objet fenêtre.

Cacher et afficher une fenêtre

Si vous préférez garder une fenêtre autour de la place de la supprimer de la mémoire, vous devriez cacher lieu de le fermer. Cacher une fenêtre est aussi une tâche facile à réaliser. Par exemple, supposons que vous avez une sortie (nommé theWindow) dans le cadre de votre classe de contrôleur. La sortie représente une fenêtre dans votre interface.

Pour masquer cette fenêtre, une méthode de HideWindow pourrait ressembler à ceci:

- (IBAction) HideWindow: (id) sender
{
[theWindow orderOut: expéditeur] -
}

La méthode de la classe orderOut NSWindow cache une fenêtre de la vue. Il existe encore dans mémoire-, il est tout simplement pas visible. Pour savoir si une fenêtre est visible, vous pouvez vérifier la valeur de retour de la méthode isVisible:

- (IBAction) HideWindow: (id) sender
{
if ([theWindow isVisible])
[theWindow orderOut: expéditeur] -
}

Pour la faire apparaître à nouveau, il suffit d'utiliser la méthode orderFront:

- (IBAction) showWindow: (id) sender
{
[theWindow orderFront: expéditeur] -
}

Si vous souhaitez une fenêtre à apparaître sur l'écran et agir comme la fenêtre principale, intercepter les frappes, utilisez la méthode makeKeyAndOrderFront. Programmeurs Cocoa utilisent fréquemment cette méthode dans la méthode awakeFromNib de forcer la fenêtre principale au premier plan:

- (void) {awakeFromNib
[theWindow makeKeyAndOrderFront: nil] -
}

Des fenêtres de positionnement

Une autre tâche importante que vous devez effectuer est de positionner les fenêtres. Avant de vous rendre bosses fenêtres autour, vous devez d'abord connaître leur position actuelle. Utilisez la méthode de NSWindow de trame pour découvrir l'origine et de la taille d'une fenêtre. La méthode renvoie une structure NSRect, qui contient NSPoint et NSSize décrivant l'origine et la taille de la fenêtre, respectivement.

Après vous savez une origine de fenêtres et de la taille, il est une question triviale pour le repositionner. Tout d'abord, définir l'origine à votre goût et appeler la méthode setFrameOrigin d'appliquer la nouvelle position. Cet exemple déplace une fenêtre de dix pixels à gauche de sa position actuelle:

- (IBAction) moveLeft: (id) sender
{
NSRect theFrame = [du cadre de theWindow] -
NSPoint theOrigin = theFrame.origin-
theOrigin.x = theOrigin.x - 10-
[theWindow setFrameOrigin: theOrigin] -
}

Pour positionner une fenêtre dans le milieu de l'écran, utilisez la méthode de centre à portée de main. Cet exemple centre une fenêtre sur l'écran:

- (IBAction) CenterWindow: (id) sender
{
[center theWindow] -
}

Garder la trace des fenêtres

La plupart des applications Cocoa ont un menu Fenêtre pour aider les utilisateurs à garder une trace de fenêtres ouvertes. Normalement, vous devriez utiliser ce menu comme une liste de fenêtres ouvertes de documents. (Vous auriez probablement pas afficher, par exemple, une fenêtre de barre d'outils dans le menu Fenêtre.) La grande chose sur le menu Fenêtre est que Cocoa prend soin d'elle pour vous. Si votre fenêtre a les propriétés suivantes, cacao ajoute automatiquement au menu de fenêtre:

  • A une barre de titre
  • Est redimensionnable
  • Peut devenir la fenêtre principale

Vous pouvez exclure une fenêtre dans le menu Fenêtre en modifiant l'une de ces propriétés. Si, d'autre part, vous avez une fenêtre qui obéit à chacune de ces règles, mais vous voulez toujours être en reste du menu Fenêtre, utiliser la méthode de setExcludedFromWindowsMenu. La méthode awakeFromNib est un bon endroit pour utiliser cet appel parce que la méthode prend effet lorsque votre application se lance.

- (void) {awakeFromNib
[theWindow setExcludedFromWindowsMenu: nil] -
}

Mettre les fenêtres de travailler pour vous

Pour voir comment ceux-ci fenêtre dispose travail, procédez comme suit:

1. Lancez Project Builder et créez un nouveau projet d'application Cocoa.

Double-cliquez sur l'icône Project Builder dans le Finder pour le lancer. Après son lancement, choisissez le menu Fichier -> Nouveau projet. Dans la fenêtre qui apparaît, sélectionnez Cocoa application et cliquez sur OK.


2. Créez une nouvelle fenêtre dans le fichier MainMenu.nib.

Double-cliquez sur le fichier MainMenu.nib dans le Groupe des ressources pour ouvrir le fichier dans Interface Builder. Dans la fenêtre de fichier MainMenu.nib, cliquez sur l'onglet Instances. Ensuite, faites glisser une nouvelle fenêtre dans le volet Cocoa Windows de la fenêtre Palettes à la fenêtre de fichier MainMenu.nib. Pour suivre l'exemple, le nom de cette nouvelle fenêtre MenuWindow. Vous pourrez l'utiliser pour contrôler la fenêtre par défaut qui est déjà partie de l'interface.

3. Ouvrez le nouveau MenuWindow et ajoutez trois boutons à elle.

4. Créer une classe de contrôleur.

Pour ce faire, cliquez sur l'onglet Classes de la fenêtre de fichier MainMenu.nib. Faites défiler vers la gauche et sélectionnez NSObject. Appuyez sur Entrée pour créer une nouvelle classe et nommez-le MyWindowController. Choisissez Classes -> Instancier MyWindowController pour créer une instance de la nouvelle classe.

5. Double-cliquez sur la nouvelle instance de MyWindowController et d'ajouter des bouches et des actions à l'instance dans la fenêtre Info.

Ajouter les points de vente suivants: theMenuWindow, theShowButton et theWindow. Ajouter ces actions: CenterWindow, moveLeft et showWindow.

Branchez les trois nouvelles actions aux boutons dans MenuWindow par le contrôle-glisser de chaque bouton t l'instance MyWindowController. Cliquez sur Connect dans la fenêtre Info pour connecter chaque action.

Ensuite, connectez les deux sorties relatif aux fenêtres à leurs fenêtres correspondantes. Control-drag de l'instance MyWindowController à chaque fenêtre dans la fenêtre de fichier MainMenu.nib. Cliquez sur Connect dans la fenêtre Infos de se connecter à une prise appropriée.

Enfin, relier la sortie theShowButton le bouton en haut dans le MenuWindow.

6. Double-cliquez sur l'instance MyWindowController. Choisissez Classes -> Créer des fichiers pour MyWindowController et ajoutez les fichiers d'en-tête et de mise en œuvre pour l'instance.

7. Retour à Project Builder et ajouter ce code dans le fichier de MyWindowController.m:

#import "MyWindowController.h"
implementation MyWindowController
- (IBAction) CenterWindow: (id) sender
{
[center theWindow] -
}
- (IBAction) moveLeft: (id) sender
{
NSRect theFrame = [du cadre de theWindow] -
NSPoint theOrigin = theFrame.origin-
theOrigin.x = theOrigin.x - 10-
[theWindow setFrameOrigin: theOrigin] -
}
- (IBAction) showWindow: (id) sender
{
if ([theWindow isVisible])
{
[theWindow orderOut: expéditeur] -
[theShowButton setTitle: @ "Afficher la fenêtre"] -
}
autre
{
[theWindow orderFront: expéditeur] -
[theShowButton setTitle: @ "Hide Window"] -
}
}
- (void) {awakeFromNib
[theWindow makeKeyAndOrderFront: nil] -
[theMenuWindow makeKeyAndOrderFront: nil] -
}
@fin

8. Testez le projet.

Pour ce faire, choisissez Build -> Build and Run.


» » » » Travailler avec des fenêtres de l'interface dans le cacao