Arbeiten mit Windows-Schnittstelle in Cocoa

Der vielleicht wichtigste Element jeder GUI-basierte Anwendung ist das Fenster. In der Tat ist es so wichtig, dass die Jungs aus Redmond es verwendet, um ihre Betriebssystem zu nennen. Die Fenster in einer Anwendung sind wie ein Stück Papier, das Sie Ideen sammeln verwenden, um Anzeigeinformationen und Aufnahmeeingang.

Fenster in Cocoa sind ebenso wichtig. Mac OS X setzt die feinen Fenster Traditionen mit, dass das Mac OS berühmt gemacht. Während der ganzen Zeit baut Kakao auf und verbessert diese Ideen aus der Vergangenheit mit aufregenden neuen Features.

Da Windows für nahezu alle Schnittstellen bilden die Basis, werden Sie sie häufig verwenden. Einige der am häufigsten verwendeten Funktionen, die Sie durchführen gehören die folgenden:

  • Das Öffnen und Schließen von Fenstern
  • Verschieben von Fenstern
  • Hinzufügen von Fenstern in das Windows-Menü

In diesem Artikel erfahren Sie, wie all diese Aufgaben zu erfüllen und mehr.

Öffnen und Schließen eines Fensters

Wenn Sie mit Fenster in Ihrem Cocoa-Projekten arbeiten, werden Sie in der Regel Interface Builder verwenden, sie zu entwerfen. Außerdem, wenn Sie ein Fenster öffnen in Interface Builder lassen, wenn Sie Ihre Schnittstelle sind die Gestaltung, wird das Fenster wird angezeigt, wenn die Anwendung ausgeführt wird. Daher ist es oft nicht notwendig, einen Befehl zu erteilen, ein Fenster zu öffnen.

Schließen eines Fensters ist eine einfache Sache:

[TheWindow schließen];

Wenn Sie ein Fenster auf diese Weise zu schließen, wird das Fenster verschwunden. Sein Inhalt wird aus dem Speicher verschwunden. Es ist nicht mehr. Das bedeutet, dass das Fenster wieder zu sehen, ein neues Fenster-Objekt öffnen müssen.

Ausblenden und ein Fenster mit

Wenn Sie ein Fenster um, statt sie aus dem Gedächtnis löschen zu halten würde es vorziehen, sollten Sie es verstecken, anstatt sie zu schließen. ein Fenster versteckt ist auch eine einfache Aufgabe zu erfüllen. Zum Beispiel: Angenommen, Sie haben einen Ausgang (mit dem Namen theWindow) als Teil Ihrer Controller-Klasse. Der Ausgang stellt ein Fenster in Ihrer Schnittstelle.

So blenden Sie das Fenster, könnte ein HideWindow Methode wie folgt aussehen:

- (IBAction) HideWindow: (id) sender
{
[TheWindow orderOut: Absender] -
}

Die orderOut Methode der NSWindow Klasse verbirgt sich ein Fenster aus dem Blickfeld. Es gibt sie noch in Gedächtnis- es gerade nicht sichtbar ist. Um herauszufinden, ob ein Fenster sichtbar ist, können Sie den Rückgabewert der isVisible Methode überprüfen:

- (IBAction) HideWindow: (id) sender
{
if ([theWindow isVisible])
[TheWindow orderOut: Absender] -
}

Um das Fenster wieder erscheinen zu lassen, verwenden Sie einfach die orderFront Methode:

- (IBAction) Showwindow: (id) sender
{
[TheWindow orderFront: Absender] -
}

Wenn Sie ein Fenster auf dem Bildschirm angezeigt werden soll und wie das Hauptfenster handeln, Tastatureingaben abfangen, verwenden Sie die makeKeyAndOrderFront Methode. Cocoa-Programmierer häufig diese Methode in der Methode awakeFromNib verwenden Sie das Hauptfenster in den Vordergrund zu erzwingen:

- (Void) {awakeFromNib
[TheWindow makeKeyAndOrderFront: nil] -
}

Positionierung Fenster

Eine weitere wichtige Aufgabe, die Sie durchführen müssen, um Fenster zu positionieren. Bevor Sie um die Fenster gehen bossing, müssen Sie zunächst ihre aktuelle Position zu ermitteln. Verwenden Sie die Rahmenmethode NSWindow den Ursprung und die Größe eines Fensters zu entdecken. Die Methode liefert eine NSRect Struktur, die enthält NSPoint und NSSize den Ursprung und die Größe des Fensters zu beschreiben sind.

Nachdem Sie ein Fenster Herkunft und Größe kennen, ist es eine triviale Angelegenheit, die es neu zu positionieren. Legen Sie zunächst den Ursprung nach Ihren Wünschen und rufen Sie die setFrameOrigin Methode, um die neue Position zu übernehmen. In diesem Beispiel wird ein Fenster zehn Pixel seiner aktuellen Position links:

- (IBAction) moveleft: (id) sender
{
NSRect theFrame = [theWindow frame] -
NSPoint theOrigin = theFrame.origin-
theOrigin.x = theOrigin.x - 10-
[TheWindow setFrameOrigin: theOrigin] -
}

Um ein Fenster in der Mitte des Bildschirms zu positionieren, verwenden Sie das handliche Center-Methode. In diesem Beispiel wird die Mitte ein Fenster auf dem Bildschirm:

- (IBAction) Center: (id) sender
{
[TheWindow center] -
}

Die Verfolgung von Fenstern

Die meisten Cocoa-Anwendungen verfügen über eine Menü Fenster Benutzer den Überblick über offene Fenster, um zu helfen. Normalerweise sollten Sie dieses Menü als eine Liste von offenen Dokumentfenster verwenden. (Sie würden wahrscheinlich nicht angezeigt werden, sagen wir, eine Symbolleiste Fenster im Menü Fenster). Die große Sache über das Menü Fenster ist, dass Kakao kümmert es für Sie. Wenn der Fenster die folgenden Eigenschaften hat, Cocoa fügt sie automatisch in das Menü Fenster:

  • Hat eine Titelleiste
  • ist resizable
  • Kann das Hauptfenster werden

Sie können ein Fenster aus dem Menü Fenster ausschließen, indem Sie eine dieser Eigenschaften zu verändern. Wenn auf der anderen Seite haben Sie ein Fenster, das jeder dieser Regeln gehorcht, aber Sie wollen es immer noch aus dem Fenster-Menü zu verlassen, verwenden Sie die setExcludedFromWindowsMenu Methode. Die awakeFromNib Methode ist ein guter Ort, um diesen Anruf zu verwenden, da die Methode wirksam wird, wenn die Anwendung gestartet wird.

- (Void) {awakeFromNib
[TheWindow setExcludedFromWindowsMenu: nil] -
}

Putting Fenster für Sie arbeiten

Um zu sehen, wie diese Fenster Arbeit kennzeichnet, gehen Sie wie folgt vor:

1. Starten Sie Project Builder und erstellen Sie eine neue Cocoa-Anwendung Projekt.

Doppelklicken Sie auf den Project Builder-Symbol im Finder um es zu starten. Nachdem es startet, wählen Sie die Datei -> Menü Neues Projekt. Im Fenster wählen Sie Cocoa-Anwendung und klicken Sie auf OK.

2. Erstellen Sie ein neues Fenster in der MainMenu.nib Datei.

Doppelklicken Sie auf die MainMenu.nib Datei im Resources Group die Datei im Interface Builder zu öffnen. Im MainMenu.nib Dateifenster klicken Sie auf die Registerkarte Instanzen. Ziehen Sie dann ein neues Fenster, aus dem Kakao-Windows-Fenster des Palettes Fenster zur MainMenu.nib Dateifenster. Um bei dem Beispiel Name dieses neuen Fenster MenuWindow. Sie werden es verwenden, um die Standard-Fenster zu steuern, die bereits Teil der Schnittstelle ist.

3. Öffnen Sie die neue MenuWindow und fügen Sie drei Tasten zu.

4. Erstellen Sie eine Controller-Klasse.

Dazu klicken Sie auf die Registerkarte Klassen des MainMenu.nib Dateifenster. Blättern Sie nach links und wählen Sie NSObject. Drücken Sie die Eingabetaste um eine neue Klasse zu erstellen und benennen es MyWindowController. Wählen Sie Klassen -> Instantiate MyWindowController eine Instanz der neuen Klasse zu erstellen.

5. Doppelklicken Sie auf die neue MyWindowController Instanz und fügen Outlets und Aktionen zum Beispiel im Info-Fenster.

Fügen Sie die folgenden Verkaufsstellen: theMenuWindow, theShowButton und theWindow. Fügen Sie diese Aktionen: Center, moveleft und Showwindow.

Verbinden Sie die drei neuen Aktionen auf die Tasten in MenuWindow durch Steuer-Ziehen von jeder Taste t die MyWindowController Instanz. Klicken Sie auf Verbinden im Info-Fenster jede Aktion zu verbinden.

Dann schließen Sie die beiden Fenster bezogenen Stellen zu ihren entsprechenden Fenstern. Strg-Taste aus der MyWindowController Instanz zu jedem Fenster in der MainMenu.nib Dateifenster. Klicken Sie auf Verbinden im Info-Fenster mit dem entsprechenden Ausgang zu verbinden.

Schließlich verbinden die theShowButton Ausgang nach oben-Taste in der MenuWindow.

6. Doppelklicken Sie auf die MyWindowController Instanz. Wählen Sie Klassen -> Erstellen von Dateien für MyWindowController und fügen Sie die Kopf- und Implementierungsdateien für die Instanz.

7. Kehren Sie zum Project Builder und diesen Code in die MyWindowController.m-Datei hinzu:

#import "MyWindowController.h"
@implementation MyWindowController
- (IBAction) Center: (id) sender
{
[TheWindow center] -
}
- (IBAction) moveleft: (id) sender
{
NSRect theFrame = [theWindow frame] -
NSPoint theOrigin = theFrame.origin-
theOrigin.x = theOrigin.x - 10-
[TheWindow setFrameOrigin: theOrigin] -
}
- (IBAction) Showwindow: (id) sender
{
if ([theWindow isVisible])
{
[TheWindow orderOut: Absender] -
[TheShowButton setTitle: @ "Schaufenster"] -
}
sonst
{
[TheWindow orderFront: Absender] -
[TheShowButton setTitle: @ "Hide Window"] -
}
}
- (Void) {awakeFromNib
[TheWindow makeKeyAndOrderFront: nil] -
[TheMenuWindow makeKeyAndOrderFront: nil] -
}
@Ende

8. Testen des Projekts.

Um dies zu tun, wählen Sie Erstellen -> Build und Run.

Menü