(iPhone) Selected Range para um UITextview não editável (ou outros métodos de manuseio de cliques?)
-
21-08-2019 - |
Pergunta
Estou usando um UITextView
manter o conteúdo estático (em chinês, o que significa que os caracteres têm uma largura fixa). Quero permitir que os usuários cliquem em um personagem no texto e traga informações de dicionário para esse personagem. Conheço todos os problemas em torno da falta de cópia e cola e tudo mais, mas espero que haja uma maneira de fazer isso sem esperar o firmware do iPhone 3.0.
No começo, pensei em usar UITextView
s selectedIndex
propriedade. Infelizmente, quando o UITextView
não é editável, o seguinte código no UITextView
sempre retorna o comprimento de todo o bloco de texto:
NSRange touchPoint = self.selectedRange;
NSLog(@"Selection: %d", touchPoint.location);
Isso faz sentido, suponho, como em um não editável UITextView
Não há como selecionar um ponto de inserção, mas isso não me ajuda. :)
Outra abordagem seria calcular, usando o fato de que o texto chinês tem largura fixa, onde o clique pousou e qual texto deve estar nesse local na época, mas isso é complicado pela pontuação que pode causar uma linha para envolver mais cedo, trazendo Personagens anteriores em uma linha.
Existe outra maneira de saber qual texto está sob um evento de toque que estou perdendo?
Solução
Ligue o seguinte antes de pedir o selectedRange
:
[[textView webView] updateSelectionWithPoint:point];
Nota: Ambos -webView
e -updateSelectionWithPoint:
são APIs privadas. Você pode ser um comportamento equivalente ao alternar editável, tornando -se o socorrista e enviando eventos de toque falso, mas isso seria muito mais trabalho