Pergunta

Estou tentando implementar um recurso em que um usuário pode selecionar algum texto em uma visualização da web e,, Depois de liberar o botão do mouse, uma pequena janela será exibida para permitir que o usuário execute algumas operações no texto selecionado.

No entanto, estou tendo problemas para determinar quando a seleção do usuário foi "confirmada", por falta de uma palavra melhor, liberando o botão do mouse. o WebEditingDelegate Protocolo informal define um -webViewDidChangeSelection: Método, mas é chamado toda vez que a seleção muda. Por exemplo, se o usuário arrastar por uma linha inteira, -webViewDidChangeSelection: é chamado muitas vezes - uma vez para cada vez que o intervalo selecionado muda. Obviamente, isso não funciona, já que eu estaria levantando minha janela várias vezes ao longo do arrasto.

Alguém sabe de uma maneira de realizar o que eu preciso?

Foi útil?

Solução

Eu acho que seu foco no "mouse up" como um evento final pode ser muito estreito. Por exemplo, o que acontece quando o usuário clica e seleciona o texto com as teclas Shift-Arrow? Seu software não deveria ter o mesmo efeito neste caso?

O que pouco conhecida sugeriu soa razoável para a parte do mouse da equação, mas estou preocupado que, quando a seleção está mudando do mouse, você nunca pode obter uma "seleção alterada" final quando o mouse estiver subindo.

Então, eu provavelmente abordaria esse problema com um atraso puro do NSTIMER. Toda vez que você obtém uma "seleção alterada" da visualização da web, redefine seu nstimer. Quando atinge um curto tempo decorrido, como 0,5 segundos dizem, coloque e/ou mova sua janela.

Você poderia ajustar isso inspecionando, na expiração do timer, critérios como se o mouse ainda está inativo. Se o mouse estiver inativo, você poderá adiar o timer um pouco e ver se o mouse foi levantado após mais meio segundo.

Outras dicas

Você pode usar o mesmo método, mas basta testar se o mouse está inativo; nesse caso, não faça nada, se o mouse não estiver desligado, assuma que acabou de ser lançado e depois mostre sua janela.

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