Pergunta

ATUALIZADO:. Agora estou substituindo o método NSView keyUp de um NSView subclasse conjunto de socorrista como abaixo, mas ainda não estou vendo evidências de que ele está sendo chamado

@implementation svsView

- (BOOL)acceptsFirstResponder {
    return YES;
}

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

@end

- POST-- ORIGINAL Eu sou novo para Cacau e Obj-C e estou tentando fazer um (void) keyUp: a partir de dentro a implementação da minha classe de controlador (que em si é do tipo NSController). Eu não tenho certeza se este é o lugar certo para colocá-lo, no entanto. Eu tenho uma série de botões como cada conjunto a uma única tecla equivalente (atributo botão IB) e cada chamadas meu (IBAction) keyInput método que passa então a identidade de cada chave para um outro objeto. Isto funciona muito bem, mas eu também quero controlar quando cada tecla é liberada.

- ORIGINAL [mau] EXEMPLO -

@implementation svsController

//init
//IBActions

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

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

@end

Ao falhar, eu também tentei o keyUp como um IBAction (em vez de void), como o keyInput é, e conectei aos botões apropriados na Interface Builder, mas depois keyUp só foi chamado quando as chaves foram definidas pelo utilizador para baixo e não quando lançado. (Que eu meio que percebi que aconteceria.)

Pardon meu noobery, mas eu deveria estar colocando esse método em outra classe ou fazer algo diferente? Onde quer que seja, porém, eu preciso ser capaz de acessar objetos de propriedade da classe do controlador.

Obrigado por qualquer visão que possa ter.

Foi útil?

Solução 2

Wow! Eu acho que acertou em cheio. Eu só precisava para instanciar o meu subclasse com uma referência NSView / NSWindow para a classe em IB. Não foi realmente criar uma instância dele na interface do usuário. Os últimos várias horas para baixo a cagar! Sans que eu aprendi uma coisa ou duas ao longo do caminho. ;)

Outras dicas

subclasses NSResponder (como uma subclasse personalizada de NSView) lidar com eventos-chave. Eles até mesmo lidar com mais eventos de nível abstrato, como "mover para a esquerda / direita", "inserção de nova linha", etc. Eles podem, em seguida, enviar uma mensagem para um controlador para responder em conformidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top