2011-05-06 3 views
6

Я создал подкласс nstextfield, и я переопределяю событие keydown, но мой код не работает, затем я переопределяю событие keyup и код работает отлично. Мой KeyDown код (не работает):Override keydownevent в 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]; 
    } 

} 

Мой KeyUp код (он работает):

-(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]; 
    } 

    } 

Я не вижу, где есть проблема с моим KeyDown кодом. Любые предложения будут приниматься

EDIT: Я читал, что вам нужно подклассифицировать NSTextView вместо NSTextField.

+0

Просьба представить подробную информацию о том, что «не работает». –

+1

выполняет NSLog? это вообще называется? это тот же самый точный экземпляр того же точного класса, где он работает, а другой нет? –

+0

Он не выполняет nslog –

ответ

7

KeyDown событие не может быть переопределен в NSTextField, если вы хотите, вы можете переопределить KeyDown событие супер вида или вам может использовать NSTextView или просто переопределить событие KeyUp в NSTextField

8

Вы можете сделать это без подклассов с помощью методов NSTextFieldDelegate:

Как сказал @Darren Inksetter, вы можете использовать control:textView:doCommandBySelector:

Сначала объявите NSTextFieldDelegate в свой тег интерфейса. Затем выполните метод:

- (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

Эта функция протокола, по-видимому, больше не существует. (macOS 10,13) – gerbil

Смежные вопросы