Hallo,
ich habe ein kleines Verständnisproblem, und zwar möchte ich NSTextField subclassen, um Tastaturevents abzufangen, weil ich in meinen Dialogboxen die Texteingabefelder mit den Cursor hoch/runter - Tasten "durchtabben" möchte. Außerdem möchte ich, daß die Delegate-Methode "textDidEndEditing:" auch aufgerufen wird, wenn nichts eingegeben wurde, das NSTextField also leer gelassen wurde.
Meine Ableitung von NSTextField sieht so aus:
Alles anzeigen
Ich habe im Interface-Builder dann ein NSTextField in meine Dialogbox gezogen und im Inspector unter Identity Class in der Dropdown-Box ALTextField ausgewählt.
Das Problem ist nur, daß die Methode keyDown in meiner Klasse nicht aufgerufen wird.
Durch Zufall habe ich mal die Methode resignFirstResponder überschrieben und als Rückgabewert NO gesetzt. Jetzt wird keyDown aufgerufen. Gebe ich in resignFirstResponder YES zurück, wird keyDown nicht mehr aufgerufen. Warum nicht?
In der überschriebenen Methode keyDown gebe ich den NSEvent "event" an die SuperKlasse, also NSTextField weiter, aber er wird anscheinend nicht verarbeitet. Irgendwie scheine ich wohl so ziemlich alles falsch zu machen.
Kann mir jemand einen Tip geben?
Liebe Grüße,
Alf
PS: Hier ist mal ein Beispielprojekt
Test.zip
ich habe ein kleines Verständnisproblem, und zwar möchte ich NSTextField subclassen, um Tastaturevents abzufangen, weil ich in meinen Dialogboxen die Texteingabefelder mit den Cursor hoch/runter - Tasten "durchtabben" möchte. Außerdem möchte ich, daß die Delegate-Methode "textDidEndEditing:" auch aufgerufen wird, wenn nichts eingegeben wurde, das NSTextField also leer gelassen wurde.
Meine Ableitung von NSTextField sieht so aus:
Quellcode
- @interface ALTextField : NSTextField
- {
- }
- -(id) initWithFrame: (NSRect) rect;
- -(void) keyDown: (NSEvent *) event;
- -(BOOL) resignFirstResponder;
- @implementation ALTextField
- -(id) initWithFrame: (NSRect) rect
- {
- self = [super initWithFrame: rect];
- return self;
- }
- // keyDown wird nur aufgerufen, wenn resignFirstResponder NO zurückgibt?
- -(void) keyDown: (NSEvent *) event
- {
- NSLog(@"keyDown aufgerufen!");
- NSUInteger keyPressed = [event keyCode];
- NSLog(@"Keycode ist %d", keyPressed);
- if(keyPressed == 125)
- NSLog(@"Cursor down");
- [super keyDown: event];
- }
- -(BOOL) resignFirstResponder
- {
- NSLog(@"resignFirstResponder aufgerufen!");
- return NO;
- }
- @end
Ich habe im Interface-Builder dann ein NSTextField in meine Dialogbox gezogen und im Inspector unter Identity Class in der Dropdown-Box ALTextField ausgewählt.
Das Problem ist nur, daß die Methode keyDown in meiner Klasse nicht aufgerufen wird.
Durch Zufall habe ich mal die Methode resignFirstResponder überschrieben und als Rückgabewert NO gesetzt. Jetzt wird keyDown aufgerufen. Gebe ich in resignFirstResponder YES zurück, wird keyDown nicht mehr aufgerufen. Warum nicht?
In der überschriebenen Methode keyDown gebe ich den NSEvent "event" an die SuperKlasse, also NSTextField weiter, aber er wird anscheinend nicht verarbeitet. Irgendwie scheine ich wohl so ziemlich alles falsch zu machen.
Kann mir jemand einen Tip geben?
Liebe Grüße,
Alf
PS: Hier ist mal ein Beispielprojekt
Test.zip
Wenn alle Ideen patentiert und alle Programmierer verhaftet sind, wird die Welt feststellen, daß Rechtsanwälte nicht programmieren können.