Frage

Ich schreibe eine Kakao-/Ziel-C-App in Xcode4 und muss wissen, wann mein Einstellungsfeld geöffnet ist. Ich brauche einen Rückruf wie windowDidbecomeKey; Ich versuchte, der in der bereitgestellten Lösung zu folgen diese Frage, doch keins windowDidBecomeKey oder windowDidExpose erscheinen als Delegiermethoden (aber andere, wie windowDidLoad, windowWillLoad, usw.).

Um genau zu verdeutlichen, was ich mit "Erscheinen Sie nicht als Delegiermethoden", Ich meine, sie werden nicht im automatischen automatischen Tipp angezeigt, wenn ich mit der Eingabe des Method -Namens beginne. ich tat Versuchen Sie es trotzdem, sie zu definieren, aber sie wurden nie gerufen.

Tun NSPanel Objekten fehlen diese Methoden oder muss ich noch etwas tun?

Derzeit habe ich eine Schnittstelle PrefWindowController:

PrefWindowController.h:

#import <Cocoa/Cocoa.h>

@interface PrefWindowController : NSWindowController
    //Delegate methods like windowDidBecomeKey appear to not be available here
@end

PrefWindowController.m:

@implementation PrefWindowController

- (id)initWithWindow:(NSWindow *)window
{
    self = [super initWithWindow:window];
    if (self) {
        NSAlert *alert = [[[NSAlert alloc] init] autorelease];
        [alert setMessageText:@".."];
        [alert runModal];
    }

    return self;
}

- (void)windowDidLoad
{
    NSAlert *alert = [[[NSAlert alloc] init] autorelease];
    [alert setMessageText:@"Loaded"];
    [alert runModal];
}

@end

Wenn das Fenster mit Beginn der Anwendung vom .xib geladen wird, windowDidLoad Brände und die oben definierte Benachrichtigung werden angezeigt. Ich tat dies nur, um zu testen, dass Methoden tatsächlich aufgerufen wurden.

Jeder Rat, wie man einen Rückruf für den Schlüssel oder der Fokus nimmt, wäre sehr hilfreich.

Aktualisieren:

Ich fügte a hinzu windowDidBecomeKey Methode zum Fenstercontroller wie SO:

PrefwindowController.h:

- (void)windowDidBecomeKey:(NSNotification *)notification;

PrefwindowController.m:

- (void)windowDidBecomeKey:(NSNotification *)notification
{
    NSLog(@"Test");
}

Die Testnachricht wird beim ersten Mal das Fenster angemeldet, aber in der Rückkehrzeile in meinem main.m Datei Ich erhalte den Fehler:

Thread 1: Programm Empfanges Signal: "exc_bad_access"

War es hilfreich?

Lösung

Das Nswindowdelegate Das Protokoll hat die folgenden Methoden

- (void)windowDidBecomeKey:(NSNotification *)notification
- (void)windowDidResignKey:(NSNotification *)notification

So können Sie Ihren NSWindowController als NSWINDOW -Delegierter einstellen, um diesen Rückruf zu erhalten. Sie können sich auch für diese Benachrichtigungen registrieren:

NSWindowDidResignKeyNotification
NSWindowDidBecomeKeyNotification

Nspanel ist eine NSWindow -Unterklasse, daher gilt all dieses Verhalten in Ihrem Fall.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top