2011-05-06 8 views
6

Creé una subclase del nstextfield y anulo el evento de selección de teclas, pero mi código no funciona, luego anulo el evento keyup y el código funciona perfectamente. Mi código keydown (no funciona):Anular keydownevent en NSTextfield

-(void)keyDown:(NSEvent *)event { 
    NSLog(@"Key released: %hi", [event keyCode]); 

    if ([event keyCode]==125){ 

     [[self window] selectKeyViewFollowingView:self]; 
    } 
    if ([event keyCode]==126){ 

     [[self window] selectKeyViewPrecedingView:self]; 
    } 

} 

Mi código keyup (funciona):

-(void)keyUp:(NSEvent*)event 
{if ([event keyCode]==125){ 

     [[self window] selectKeyViewFollowingView:self]; 
    } 
    if ([event keyCode]==126){ 

     [[self window] selectKeyViewPrecedingView:self]; 
    } 

    if ([event keyCode]==36){ 

     [[self window] selectKeyViewFollowingView:self]; 
    } 

    } 

no veo dónde está el problema con mi código keydown. Cualquier sugerencia será aceptada

EDITAR: He leído que tiene que subclase NSTextView en lugar de NSTextField.

+0

Indique los detalles que describen "no funciona". –

+1

¿realiza el NSLog? ¿se lo está llamando en absoluto? ¿Son estas la misma instancia exacta de la misma clase exacta donde uno trabaja y el otro no? –

+0

No realiza el nslog –

Respuesta

7

El evento KeyDown no puede ser anulado en un NSTextField, si se quiere, se puede anular el evento KeyDown del super vista o podría utilizar un NSTextView o simplemente anular el evento keyup en el NSTextField

8

puede hacerlo sin subclases mediante el uso de métodos NSTextFieldDelegate:

Como @Darren Inksetter dijo, puede usar control:textView:doCommandBySelector:

Primero, declare NSTextFieldDelegate en su etiqueta de interfaz. Luego implemente el método:

- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector 
{ 
    if(commandSelector == @selector(moveUp:)){ 
     // Do yourthing here, like selectKeyViewFollowingView 
     return YES; // Return YES means don't pass it along responders chain. Return NO if you still want system's action on this key. 
    } 
    if(commandSelector == @selector(moveDown:)){ 
     // Do the same with the keys you want to track 
     return YES; 
    } 
    return NO; 
} 
+0

Esta función de protocolo aparentemente ya no existe. (macOS 10.13) – gerbil