6

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

    ...
    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

4 回答 4

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];
    }
}
于 2010-09-07T17:52:54.283 回答
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, length) 大概到范围的末尾,然后 NSMakeRange(length, 0) 将光标放在那里,所有这些都没有改变它在 4.0 中的作用

NSUInteger length = self.textView.text.length;
self.textView.selectedRange = NSMakeRange(0, length); 
self.textView.selectedRange = NSMakeRange(length, 0);
于 2010-09-07T19:36:15.750 回答
1

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

于 2013-04-03T01:47:29.730 回答
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];
}
于 2015-06-09T08:45:58.823 回答