2009-03-21 6 views
2

J'utilise un UITextView pour contenir du contenu statique (en chinois, ce qui signifie que les caractères sont tous de largeur fixe). Je veux permettre aux utilisateurs de cliquer sur un caractère dans le texte et d'afficher les informations du dictionnaire pour ce personnage. Je connais tous les problèmes entourant le manque de copier-coller et tout ça, mais j'espère qu'il y aura un moyen de le faire sans attendre le firmware de l'iPhone 3.0. Dans un premier temps, j'ai pensé à utiliser UITextView s selectedIndex propriété. Malheureusement, lorsque le UITextView est non modifiable, le code suivant dans les UITextView « s retourne toujours la longueur du bloc de texte entier:(iPhone) selectedRange pour un UITextView non modifiable (ou d'autres méthodes de gestion des clics?)

NSRange touchPoint = self.selectedRange; 
NSLog(@"Selection: %d", touchPoint.location); 

Cela est logique, je suppose, comme un UITextView non modifiable il n'y a pas façon de sélectionner un point d'insertion, mais cela ne m'aide pas. :)

Une autre approche serait de calculer, en utilisant le fait que le texte chinois est fixe largeur, où le clic a atterri et quel texte devrait être sous cet endroit à ce moment, mais cela est compliqué par la ponctuation qui peut causer ligne à envelopper tôt, en mettant les caractères précédents sur une ligne.

Existe-t-il une autre façon de savoir quel texte est sous un événement tactile qui me manque?

Répondre

2

Appelez le suivant avant de demander la selectedRange:

[[textView webView] updateSelectionWithPoint:point]; 

Note: Les deux -webView et -updateSelectionWithPoint: sont des API privées. Vous pouvez également utiliser le comportement équivalent en basculant editable, en devenant le premier répondeur et en envoyant de faux événements tactiles, mais ce serait beaucoup plus de travail

+0

Juste essayé. Fonctionne à merveille si l'UITextView est éditable (ne pas avoir à maintenir le contact jusqu'à ce que la loupe apparaisse, etc.), mais retourne quand même la longueur du texte quand UITextView est rendu non-éditable. Devra essayer la version plus longue de l'événement faux plus tard. –

+0

Peut-être que le réglage éditable avant et après fonctionnera. Bien sûr, si vous affichez simplement du texte en clair, mieux vaut simplement utiliser une vue personnalisée qui dessine du texte manuellement et vous aurez un contrôle total. – rpetrich

Questions connexes