Событие keyUp прослушано ?: Переопределенный метод NSView - PullRequest
3 голосов
/ 06 декабря 2009

ОБНОВЛЕНО: теперь я переопределяю метод NSView keyUp из подкласса NSView, установленного для первого респондента, как показано ниже, но все еще не вижу доказательств того, что он вызывается.

@implementation svsView

- (BOOL)acceptsFirstResponder {
    return YES;
}

- (void)keyUp:(NSEvent *)event {
  //--do key up stuff--
  NSLog(@"key up'd!");
}

@end

- ОРИГИНАЛЬНЫЙ ПОЧТА-- Я новичок в Какао и Obj-C и пытаюсь сделать (void) keyUp: из реализации моего класса контроллера (который сам по себе имеет тип NSController). Я не уверен, что это правильное место, чтобы поставить его, хотя. У меня есть ряд одинаковых кнопок, каждая из которых настроена на уникальный эквивалент ключа (атрибут кнопки IB), и каждая вызывает мой (IBAction) метод keyInput, который затем передает идентификатор каждого ключа другому объекту. Это работает просто отлично, но я также хочу отслеживать, когда каждая клавиша выпущена.

- ОРИГИНАЛЬНЫЙ [плохой] ПРИМЕР -

@implementation svsController

//init
//IBActions

- (IBAction)keyInput:(id)sender {
  //--do key down stuff--
}

- (void)keyUp:(NSEvent *)event {
  //--do key up stuff--
}

@end

После сбоя я также попробовал keyUp как IBAction (вместо void), как это определено пользователем keyInput, и подключил его к соответствующим кнопкам в Интерфейсном Разработчике, но тогда keyUp вызывался только тогда, когда ключи были вниз, а не когда выпущен. (Который, я бы подумал, случится.)

Прошу прощения, но я должен поместить этот метод в другой класс или сделать что-то по-другому? Тем не менее, где бы он ни находился, мне нужен доступ к объектам, принадлежащим классу контроллера.

Спасибо за ваше понимание.

Ответы [ 2 ]

2 голосов
/ 06 декабря 2009

Подклассы NSResponder (такие как пользовательский подкласс NSView) обрабатывают ключевые события. Они даже обрабатывают больше событий абстрактного уровня, таких как «перемещение влево / вправо», «вставка новой строки» и т. Д. Затем они могут отправить сообщение контроллеру для соответствующего ответа.

1 голос
/ 06 декабря 2009

Вау! Я думаю, что прибил это. Мне просто нужно было создать экземпляр моего подкласса с помощью ссылки NSView / NSWindow на класс в IB. На самом деле не создавал экземпляр этого в пользовательском интерфейсе. Прошло несколько часов вниз с крэппера! Нет, я узнал кое-что по пути. ;)

...