我有大量的文字,我甚至无法手动滚动。所以,我需要将UITextView
滚动到某一点。
我测试了以下可行的代码,但(y)
的数量太大了。
self.txtView.contentOffset = CGPointMake(0, 100000);
那么,有没有办法滚动到UITextView
中的某个点?
答案 0 :(得分:2)
UITextView
是UIScrollView
类的子类。因此,您可以将其滚动到节目特定的框架:
[textView scrollRectToVisible:CGRectMake(0, 100, 320, 20) animated:YES];
此外,您可以滚动到特定文字:
[textView scrollRangeToVisible:[textView.text rangeOfString:@"Lorem ipsum"]];
答案 1 :(得分:1)
UITextView
有一个方法:
setSelectedRange: (NSRange) range
如果您知道字符串第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];