转到UITextView中的特定行

时间:2011-07-10 22:42:27

标签: iphone cocoa-touch uitextview

如何告诉UITextView将光标设置为特定行(例如第13行)?

1 个答案:

答案 0 :(得分:5)

UITextView有一个方法setSelectedRange:(NSRange)范围。

如果您知道字符串第13行出现在哪里,请说出位置237,然后执行:[textView setSelectedRange:NSMakeRange(237,0)];

如果您需要找出第13行的位置,那么您还需要做更多工作。我首先看一下sizeWithFont,记得在你的textView宽度上咬掉大约16个点,这样iOS才能得到正确的总和。 (也就是说,如果你有换行符,那么只需找到第13个(或第n个)“\ n”的位置。)

在评论

中进一步查询后,

更新

有很多方法可以找到第n个位置。以下片段并不漂亮,但它可以完成这项工作。您还可以使用rangeOfString并遍历“\ n”。在此片段中,如果目标行大于行数,则将光标放在末尾。这里的代码假设您有一个名为userEntry的UITextView属性。

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];