将光标定位到uitextview中的文本末尾并滚动到位置

时间:2010-09-07 17:26:02

标签: iphone scroll cursor uitextview

使用下面的代码,我将plist中的文本放入textView。 textView还没有第一响应者;该文本最初仅供阅读。在iOS4中,goToEndOfNote代码将光标定位在文本的末尾并滚动到该位置。在3.1.3中,直到触摸屏幕才会滚动到结尾(除非需要更改或添加,否则不需要),使textView为firstresponder。我希望它在3.1.3中工作,就像在4.0中一样。请任何想法。感谢。

    ...
    self.temp = [[[NSMutableArray alloc] initWithContentsOfFile:myPlistPath] autorelease]; 
    self.textView.text = [self.temp objectAtIndex:0];
    [self goToEndOfNote];
    //[self performSelector:@selector(goToEndOfNote) withObject:nil afterDelay:0.1];
}

- (void) goToEndOfNote {
    NSUInteger length = self.textView.text.length;  
    self.textView.selectedRange = NSMakeRange(length, 0);
}

4 个答案:

答案 0 :(得分:3)

我使用setContentOffset:animated滚动到我的某个应用中UITextView的顶部。也应该工作滚动到底部。尝试:

- (void) goToEndOfNote {
    NSUInteger length = self.textView.text.length;  
    self.textView.selectedRange = NSMakeRange(length, 0);
    [textView setContentOffset:CGPointMake(0, length) animated:YES];
}

你也可以把它包起来,这只发生在3.1.3及以下:

- (void) goToEndOfNote {
    NSUInteger length = self.textView.text.length;  
    self.textView.selectedRange = NSMakeRange(length, 0);
    NSString* systemVersion = [[UIDevice currentDevice] systemVersion];
    float version = [systemVersion floatValue];
    if (version < 3.2) {
        [textView setContentOffset:CGPointMake(0, length) animated:YES];
    }
}

答案 1 :(得分:2)

不确定这是否是答案但是有效。

在3.1.3中,使用原始代码,光标位于末尾,但滚动位于顶部。在4.0中,两者都在底部。

NSUInteger length = self.textView.text.length;
self.textView.selectedRange = NSMakeRange(length, 0);

然后我注意到在3.1.3中,切换0和长度,滚动位于底部,但光标位于顶部。

NSUInteger length = self.textView.text.length;
self.textView.selectedRange = NSMakeRange(0, length); 

把两者结合起来。它滚动到底部NSMakeRange(0,长度)大概到范围的末尾,然后NSMakeRange(长度,0)将光标放在那里,所有这些都没有改变它在4.0中的作用

NSUInteger length = self.textView.text.length;
self.textView.selectedRange = NSMakeRange(0, length); 
self.textView.selectedRange = NSMakeRange(length, 0);

答案 2 :(得分:1)

您可以使用[UITextView -setSelectedRange:]设置(location = TEXT_VIEW_STRING_LENGTH,length = 0)范围以将光标移至文本末尾,然后使用相同范围调用[UITextView -scrollRangeToVisible:]以将光标滚动到可见。

答案 3 :(得分:1)

现在已经很晚了但我找到了解决方案。它需要一点点破解

- (void) textViewDidBeginEditing:(UITextView*)textview
{
   [self performSelector:@selector(placeCursorAtEnd:) withObject:textview afterDelay:0.01];
}

- (void)placeCursorAtEnd:(UITextView *)textview
{
     NSUInteger length = textview.text.length;

    textview.selectedRange = NSMakeRange(length, 0);

    [textView setContentOffset:CGPointMake(0, length) animated:YES];
}