Arbeide med Interface Windows i Cocoa

April 10  by Eliza

Kanskje den viktigste element i enhver GUI-basert program er i vinduet. Faktisk er det så viktig at disse gutta fra Redmond brukt det for å nevne deres operativsystem. Vinduene i et program er som biter av papir som du bruker til å samle ideer, vise informasjon, og ta opp innspill.

Vinduer i Cocoa er like viktige. Mac OS X fortsetter å bruke de fine vindus tradisjoner som gjorde Mac OS berømt. Hele tiden, bygger Cocoa på og forbedrer disse ideene fra fortiden med spennende nye funksjoner.

Fordi vinduene danner grunnlaget for nesten alle grensesnitt, vil du bruke dem ofte. Noen av de vanligste funksjonene som du vil utføre inkluderer følgende:

  • Åpning og lukking av vinduer
  • Flytte vinduer
  • Legge vinduer til Windows-menyen

I denne artikkelen, vil du oppdage hvordan du kan utføre alle disse oppgavene og mer.

Åpne og lukke et vindu

Når du arbeider med vinduer i dine Cocoa prosjekter, vil du vanligvis bruker Interface Builder til å utforme dem. Videre, hvis du lar et vindu åpent i Interface Builder når du designer ditt grensesnitt, er det vinduet vil vises når programmet kjører. Derfor er det ofte unødvendig å sende en kommando for å åpne et vindu.

Lukke et vindu er en enkel sak:

[TheWindow nær];

Når du lukker et vindu på denne måten, er vinduet borte. Innholdet er borte fra minnet. Det er ikke mer. Det betyr å se vinduet igjen, må du åpne et nytt vindu objekt.

Skjule og vise et vindu

Hvis du foretrekker å holde et vindu rundt i stedet for å slette den fra minnet, bør du gjemme den i stedet for å lukke det. Skjule et vindu er også en enkel oppgave å utføre. For eksempel si at du har en stikkontakt (oppkalt theWindow) som en del av kontrolleren klasse. Uttaket representerer et vindu i grensesnittet.

Å skjule at vinduet, kanskje en hideWindow metode se slik ut:

- (IBAction) hideWindow: (id) avsender
{
[TheWindow orderOut: avsender];
}

Den orderOut metoden i NSWindow klassen skjuler et vindu fra visningen. Den eksisterer fortsatt i minnet; det er bare ikke synlig. For å finne ut om et vindu er synlig, kan du sjekke returverdien av isVisible metode:

- (IBAction) hideWindow: (id) avsender
{
if ([theWindow isVisible])
[TheWindow orderOut: avsender];
}

Å gjøre vinduet vises igjen, bare bruke orderFront metoden:

- (IBAction) Showwindow: (id) avsender
{
[TheWindow orderFront: avsender];
}

Hvis du ønsker et vindu skal vises på skjermen og fungerer som hovedvinduet, avskjære tastetrykk, bruker makeKeyAndOrderFront metoden. Kakao programmerere ofte bruker denne metoden i awakeFromNib metode for å tvinge hovedvinduet til forgrunnen:

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

Posisjonering vinduer

En annen viktig oppgave som du må utføre er å plassere vinduer. Før du går bossing vinduer rundt, må du først finne ut sin nåværende stilling. Bruk rammemetoden NSWindow å finne opprinnelsen og størrelsen på et vindu. Metoden returnerer en NSRect struktur, som inneholder NSPoint og NSSize beskriver vinduet opprinnelse og størrelse, henholdsvis.

Når du vet en windows opprinnelse og størrelse, er det en triviell sak å flytte den. Først setter opprinnelsen til din smak og ringe setFrameOrigin metode for å bruke den nye posisjonen. Dette eksemplet flytter et vindu ti piksler igjen av sin nåværende stilling:

- (IBAction) moveLeft: (id) avsender
{
NSRect theFrame = [theWindow ramme];
NSPoint theorigin = theFrame.origin;
theOrigin.x = theOrigin.x - 10;
[TheWindow setFrameOrigin: theorigin];
}

Å plassere et vindu i midten av skjermen, kan du bruke den hendige sentrum metoden. Dette eksemplet sentre et vindu på skjermen:

- (IBAction) centerWindow: (id) avsender
{
[TheWindow center];
}

Holde orden på vinduer

De fleste Cocoa programmer har en Window-menyen for å hjelpe brukere å holde oversikt over åpne vinduer. Normalt bør du bruke denne menyen som en liste over åpne dokumentvinduer. (Du har sannsynligvis ikke ville vise, sier en verktøylinje vindu i vindusmenyen.) Det flotte Vindu-menyen er at Cocoa tar vare på den for deg. Hvis vinduet har følgende egenskaper, legger Cocoa automatisk det til Window-menyen:

  • Har en tittellinje
  • Er resizable
  • Kan bli hovedvinduet

Du kan ekskludere et vindu på Vindu-menyen ved å endre noen av disse egenskapene. Dersom, på den annen side, har du et vindu som lystrer hver av disse reglene, men du likevel vil at det skal bli tatt ut av Vindu-menyen, kan du bruke setExcludedFromWindowsMenu metoden. Den awakeFromNib metoden er et bra sted å bruke denne samtalen fordi metoden trer i kraft når programmet starter.

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

Putting vinduer for å jobbe for deg

For å se hvordan disse vindu har arbeid, gjør du følgende:

1. Start Project Builder og opprette en ny Cocoa søknad prosjekt.

Dobbeltklikk på Project Builder symbolet i Finder for å starte den. Etter det starter, velger du Fil -> Nytt prosjekt menyen. I vinduet som vises, velger Cocoa Søknad og klikk på OK.

2. Opprett et nytt vindu i MainMenu.nib filen.

Dobbeltklikk på MainMenu.nib filen i Resources Group for å åpne filen i Interface Builder. I MainMenu.nib fil vinduet, klikker du på kategorien forekomster. Deretter drar et nytt vindu fra Cocoa-Windows ruten i Palettes vinduet til MainMenu.nib fil vinduet. Å følge med eksempelet, navn denne nye vindu MenuWindow. Du vil bruke den til å kontrollere standardvindu som allerede er en del av grensesnittet.

3. Åpne den nye MenuWindow og legge til tre knapper til det.

4. Lag en kontroller klasse.

For å gjøre dette, klikker du på Classes kategorien i MainMenu.nib fil vinduet. Bla til venstre og velg NSObject. Trykk på returtasten for å opprette en ny klasse og gi den navnet MyWindowController. Velg Klasser -> instantiate MyWindowController å opprette en forekomst av den nye klassen.

5. Dobbeltklikk på den nye MyWindowController eksempel og legge til utsalgssteder og handlinger til forekomsten i Info-vinduet.

Legg til følgende utsalgssteder: theMenuWindow, theShowButton, og theWindow. Legg disse handlingene: centerWindow, moveLeft, og Showwindow.

Koble de tre nye handlinger til knappene i MenuWindow av kontroll-dra fra hver knapp t MyWindowController eksempel. Klikk på Koble til i Info-vinduet for å koble hver handling.

Deretter kobler de to vindusrelaterte uttak til deres tilsvarende vinduer. Kontroll-drag fra MyWindowController eksempel til hvert vindu i MainMenu.nib fil vinduet. Klikk på Koble til i Info-vinduet for å koble til den aktuelle uttaket.

Koble til slutt theShowButton uttaket til den øverste knappen i MenuWindow.

6. Dobbeltklikk på MyWindowController eksempel. Velg Klasser -> Opprett filer for MyWindowController og legge til header og implementering filer for forekomsten.

7. Gå tilbake til Project Builder og legge til denne koden til MyWindowController.m filen:

#import "MyWindowController.h"
implementation MyWindowController
- (IBAction) centerWindow: (id) avsender
{
[TheWindow center];
}
- (IBAction) moveLeft: (id) avsender
{
NSRect theFrame = [theWindow ramme];
NSPoint theorigin = theFrame.origin;
theOrigin.x = theOrigin.x - 10;
[TheWindow setFrameOrigin: theorigin];
}
- (IBAction) Showwindow: (id) avsender
{
if ([theWindow isVisible])
{
[TheWindow orderOut: avsender];
[TheShowButton setTitle: @ "Show Window"];
}
annet
{
[TheWindow orderFront: avsender];
[TheShowButton setTitle: @ "Hide Window"];
}
}
- (Void) awakeFromNib {
[TheWindow makeKeyAndOrderFront: null];
[TheMenuWindow makeKeyAndOrderFront: null];
}
end

8. Test prosjektet.

For å gjøre dette, velger Bygg -> Bygg og Kjør.