Pergunta

Estou aprendendo lentamente Objective-C e Cocoa, e a única maneira que vejo até agora de capturar eventos importantes em Text Views é usar delegação, mas estou tendo problemas para encontrar documentação útil e exemplos sobre como implementar tal solução.Alguém pode me indicar a direção certa ou fornecer ajuda em primeira mão?

Foi útil?

Solução

Geralmente, a maneira como você implementa isso é simplesmente adicionar a função necessária ao controlador da sua visualização e definir seu delegado.Por exemplo, se você deseja que o código seja executado quando a visualização for carregada, basta delegar sua visualização ao controlador e implementar a função wakeFromNib.

Portanto, para detectar o pressionamento de uma tecla em uma visualização de texto, certifique-se de que seu controlador seja o delegado da visualização de texto e implemente isto:

- (void)keyUp:(NSEvent *)theEvent

Observe que este é um método NSResponder herdado, não um método NSTextView.

Outras dicas

Apenas uma dica para realce de sintaxe:

Não destaque toda a visualização do texto de uma só vez - é muito lento.Além disso, não destaque o último texto editado usando -editedRange - também será muito lento se o usuário colar um grande corpo de texto na visualização de texto.

Em vez disso, você precisa destacar o texto visível, feito assim:

NSRect visibleRect = [[[textView enclosingScrollView] contentView] documentVisibleRect];
NSRange visibleRange = [[textView layoutManager] glyphRangeForBoundingRect:visibleRect inTextContainer:[textView textContainer]];

Em seguida, você alimenta visívelRange em seu código de destaque.

É importante nos dizer o que você realmente está tentando realizar - o objetivo de nível superior que você acha que a captura de eventos importantes em um NSTextView irá abordar.

Por exemplo, quando alguém me pergunta como capturar eventos importantes em um NSTextCampo o que eles realmente querem saber é como validar as informações em campo.Isso é feito definindo o formatador do campo para uma instância do NSFormatter (seja um dos formatadores incluídos no Cocoa ou um customizado), e não processando as teclas digitadas diretamente.

Então, dado esse exemplo, o que você realmente está tentando realizar?

Pesquisei bastante e encontrei uma resposta para minha própria pergunta.Falarei disso abaixo, mas obrigado aos dois caras que responderam.Acho que Stack Overflow já é um site fantástico - espero que mais desenvolvedores de Mac encontrem seu caminho assim que a versão beta terminar - este pode ser um ótimo recurso para outros desenvolvedores que desejam fazer a transição para a plataforma.

Então, conforme sugerido por Danny, encontrei minha resposta na delegação.O que não entendi na postagem de Danny foi que há um conjunto de métodos habilitados para delegado no objeto de delegação e que o delegado deve implementar esses eventos.E assim, para um TextView, consegui encontrar o método textDidChange, que realizou o que eu queria de uma maneira ainda melhor do que simplesmente capturar teclas pressionadas.Então, se eu implementar isso no meu controlador:

- (void)textDidChange:(NSNotification *)aNotification;

Posso responder ao texto que está sendo editado.É claro que existem outros métodos disponíveis, e estou animado para brincar com eles, porque sei que aprenderei muito com isso.Obrigado novamente, pessoal.

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