Comment puis-je dire à UITextView de placer le curseur sur une ligne particulière (la ligne 13, par exemple) lorsqu'il apparaît ?
Réponse
Trop de publicités?UITextView possède une méthode setSelectedRange : (NSRange) range.
Si vous savez où se trouve la ligne 13 dans la chaîne, disons à l'emplacement 237, alors faites-le : [textView setSelectedRange : NSMakeRange(237,0)] ;
Si vous devez trouver où se trouve la ligne 13, vous avez plus de travail à faire. Je commencerais par examiner sizeWithFont, en n'oubliant pas de retrancher environ 16 points à la largeur de votre textView pour que iOS fasse les bons calculs. (Cela dit, si vous avez des sauts de ligne, il suffit de trouver l'emplacement de la 13ème (ou nème) " \n ".)
Mise à jour suite à votre demande dans le commentaire
Il y a beaucoup de façons de trouver la position du nième \n. L'extrait suivant n'est pas très joli, mais il fera l'affaire. Vous pouvez également utiliser rangeOfString et itérer à travers les " \n ". Dans cet extrait, si la ligne cible est supérieure au nombre de lignes, le curseur est placé à la fin. Le code ici suppose que vous avez une propriété UITextView appelée userEntry.
int targetLine = 3; // change this as appropriate 0=first line
NSRange range;
NSString* exampleString = @"Hello there\nHow is it going?\nAre you looking for a new line?\nA new line in what?\nThat remains to be seen";
NSArray* separateLines = [exampleString componentsSeparatedByString:@"\n"];
if (targetLine < [separateLines count])
{
int count = 0;
for (int i=0; i<targetLine; i++)
{
count = count + [[separateLines objectAtIndex:i] length] + 1; // add 1 to compensate \n separator
}
range = NSMakeRange(count, 0);
}
else
{
range = NSMakeRange([exampleString length], 0); // set to the very end if targetLine is > number of lines
}
[[self userEntry] setText: exampleString];
[[self userEntry] setSelectedRange:range];
[[self userEntry] becomeFirstResponder];