keydown Delegate für programmatisch erstelltes NSTextView wird nicht aufgerufen.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • keydown Delegate für programmatisch erstelltes NSTextView wird nicht aufgerufen.

    Hi, ich bin neu hier und komme einfach nicht weiter, hoffentlich kann mir jemand helfen...
    Ich versuche ein "keydown" Delegate für ein programmatisch erstelltes NSTextView zu erstellen. Hier der Code:

    AusgabeController.m
    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
    {
    textView = [[NSTextView alloc] initWithFrame: NSMakeRect(20, 200, 300, 50)];
    [textView setEditable: YES];
    [textView setBackgroundColor:[NSColor whiteColor]];
    [textView setString:@"llalala"];
    [haha addSubview: textView]; //haha ist ein NSView-Object
    NSLog(@"Frame: %f",[textView frame].origin.y);
    [textView setDelegate: self];
    }

    - (void)keyDown:(NSEvent *)theEvent
    {
    NSLog(@"Frame: %f",[textView frame].origin.y);
    }


    AusgabeController.h
    #import <Cocoa/Cocoa.h>
    #import "ViewController.h"

    @interface AusgabeController : NSObject <NSTextViewDelegate>
    {
    IBOutlet ViewController *haha;
    NSTextView* textView;
    }
    @end


    Das TextView-Object erscheint auch im Fenster. Sobald ich aber eine Taste drücke um etwas zu Schreiben, erscheint keine Meldung im Terminal.
    Was ist daran falsch?
    Danke schonmal für die Hilfe!
  • gamon90 schrieb:

    keyDown: ist eine Methode von NSResponder...und NSTextView erbt von NSResponder?
    werden delegateMethoden nicht vererbt?

    Auch in NSResponder ist keyDown: keine Delegate Methode. keyDown: ist einfach nur eine Instanz-Methode von NSResponder.

    gamon90 schrieb:

    Gibt es eine anderes Delegate das auf eine Eingabe in ein NSTextView wie das keyDown: Delegate reagiert?

    Nein, das Event-Handling funktioniert nicht über Delegates. Schau Dir das hier mal an.

    Michael
  • Zur schnellen Erläuterung:
    keyDown wird als delegate aus NSWindow heraus *aufgerufen*. Und zwar die keyDown-Methode des sogenannten keyWindows und des firstResponders. Meist funktioniert es so dass es das Objekt ist auf das als letztes geclickt wurde. Ein Mausclick in Dein NSTextView setzt den NSTextView als Empfänger von keyDown-Aufrufen (und schaltet den Cursor an). keyDown verarbeitet der NSTextView einfach (und kümmert sich nicht drum dass Du einen delegate beim NSTextView gesetzt hast und ob es da vielleicht auch ein keyDown gibt).

    Lösungsweg: Subklasse von NSTextView bauen die keyDown überschreibt.

    -- hns