Anzeige

Tutorial: Webbrowser in 10 Minuten (Teil 2)

Etwas Code
Als letzten Schritt müssen wir jetzt noch die entsprechenden Funktionen und Actions für unser Programm implementieren. Doch bevor wir beginnen, erinnern wir uns nochmal an die Zielstellung: wir wollen, dass wenn der Webbrowser gestartet wird, eine von uns definierte Seite geladen wird. Diese Seite soll über einen Einstellungsdialog definiert werden.

Der Controller für unser Hauptfenster ist MNController. Er ist also dafür verantwortlich nach dem Programmstart die richtige Seite zu laden. Um bestimmte Aktionen nach dem Start eines Programms auszuführen, können Cocoa-Programme die Delegate-Methode applicationDidFinishLaunching implementieren. Deshalb haben wir den MNController als Delegate des File’s Owners eingestellt. Bei der Initialisierung von Cocoa-Objekten wird standardmäßig die Init-Methode aufgerufen, in der Objekt-spezifische Initialisierungen vorgenommen werden können.

Im MNPreferencesController müssen wir zusätzlich zur Init-Methode unsere beiden im Interface-Builder definierten Action-Methoden implementieren. Außerdem müssen wir die Delegate-Methode windowDidBecomeKey implementieren, damit wir bei der Anzeige des Fensters das Textfeld für die Homepage-URL mit dem entsprechenden Text befüllen können. Zusätzlich implementieren wir eine Methode homePageURL die von anderen Objekten aufgerufen werden kann, um die aktuelle URL der Homepage zu ermitteln.

MNController
Da wir in unserer Init-Methode für den MNController keine speziellen Initialisierungen vornehmen müssen schaut die Methode recht übersichtlich aus:


-(id)init
{
  // init super class
  self = [super init];
  // custom inits here
  return self;
}

Die Methode applicationDidFinishLaunching schaut wie folgt aus:


-(void)applicationDidFinishLaunching:(NSNotification *)notification
{
  NSString *url = [preferencesController homePageURL];
  if(url != nil)
  {
    [urlTextfield setStringValue: url];
    [[webView mainFrame] loadRequest:
        [NSURLRequest requestWithURL:
            [NSURL URLWithString: url]]];
  }
}

Im MNPreferencesController müssen wir zunächst in der Header-Datei noch eine weitere Variable und eine Funktion definieren. In der @interface-Sektion definieren wir NSUserDefaults *myDefaults; und darunter die Funktion -(NSString *)homePageURL;.

Die Implementierung der Init-Methode enthält diesmal die Initialisierung einer Referenz auf die systemweite Einstellungsdatenbank:


-(id)init
{
  self = [super init];
  if(self)
    // reference to system pref database
    myDefaults = [NSUserDefaults standardUserDefaults];
  return self;
}

Wenn der Einstellungsdialog angezeigt wird, dann soll im Textfeld auch die URL der eingestellten Homepage angezeigt werden. Daher implementieren wir die Delegate-Methode windowDidBecomeKey:


- (void)windowDidBecomeKey:(NSNotification *)aNotification
{
  NSString *url = (NSString *)[myDefaults objectForKey: @"homePageURL"];

  if(url != nil)
    [homepageTextfield setStringValue: url];
}

Die beiden Action-Methoden sind wie folgt implementiert:


-(IBAction)applyPreferences:(id)sender
{
  // save changes to defauls database
  [myDefaults setObject:
      [homepageTextfield stringValue] forKey:
          @"homePageURL"];
  [window close];
}

-(IBAction)cancelPreferences:(id)sender
{
	[window close];
}

Damit andere Objekte die Homepage-URL abfragen können, liefert die Methode homePageURL die aktuell gespeicherte URL zurück:


-(NSString *)homePageURL
{
  return (NSString *)[myDefaults objectForKey:
      @"homePageURL"];
}


Das war's. Jetzt noch kompilieren und wenn wir keine Syntax-Fehler gemacht haben, dann sollte jetzt alles laufen. Damit man die Implementierung nochmal etwas besser nachlesen kann, habe ich die Dateien zusammengepackt und zum Download bereitgestellt.

Ausblick
Beim nächsten Mal werden wir den heute geschriebenen Code wieder vereinfachen, denn dann beschäftigen wir uns mit Bindings und vorgefertigten Controller-Klassen. Außerdem werden wir uns etwas um die Oberfläche kümmern und diese weiter aufhübschen.

Wer sich bis dahin nicht ausgelastet fühlt, kann sich ja an der Implementierung eines Home-Buttons im Hauptfenster versuchen. Alle dafür benötigten Fertigkeiten und Methoden habe ich in diesem Tutorial gezeigt, so dass es nicht allzu schwer sein sollte.

Links
[1] WebKit Reference
[2] Application Kit
[3] Foundation Kit

Seiten: 1 2 3 4

Matthias Lange
Autor:
Datum:
Kategorie:
Tags:
Matthias Lange, Redakteur
02.03.2008, 17:48 Uhr
Software
, , , , ,  

1 Kommentar

  1. macedes

    02.03.08, 21:44 Uhr, #1

    macedes meint:

    cool, teil 1 hab ich garnicht bemerkt. danke für diesen tollen tutorial. ich fang jetzt mal bei teil 1 an


Anzeige

Dein Kommentar:

Mit einem Facebook-Account kannst du dich auch auf Macnotes anmelden:
Connect with Facebook


  

Mein Macnotes

Daten merken

Neu hier? Ein Macnotes-Account bringt dir viele Vorteile

Anzeige
blogoscoop