2010-09-07 91 views
6

使用下面的代码,我将来自plist的文本放到textView中。 textView尚未成为firstresponder;该文本最初仅供阅读。在iOS4中,goToEndOfNote代码将光标定位在文本的末尾,并滚动到该位置。在3.1.3中,直到触摸屏幕(除非需要更改或添加都不需要)才能滚动到结尾,从而使textView成为firstresponder。我希望它能像4.0中那样在3.1.3中工作。请任何想法。谢谢。将光标定位到uitextview中的文本末尾,并滚动到位置

... 
    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); 
} 

回答

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]; 
    } 
} 
+0

几乎但不完全。文本视图是屏幕的大部分。在4.0中add'l行[textView setContentOffset:CGPointMake(0,length)animated:YES];导致最后一个字符滚动到textView(good)的底部。在3.1.3中,它导致最后一个字符滚动到屏幕上的中间位置(ok),但在两个操作系统版本中,如果屏幕上只有1或2行,它们会从屏幕上滚动(不是这样)好)。我希望滚动只能在screenful出现后才能启动(因为它在4.0中只有我的方法中的两条原始行)。 – 2010-09-07 18:49:00

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); 
1

你可以使用[UITextView -setSelectedRange:]来设置(位置= TEXT_VIEW_STRING_LENGTH,长度= 0)范围,以将光标移动到文本的末尾,然后调用[UITextView -scrollRangeToVisible:]并使用相同的范围将光标滚动到可见。

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]; 
} 
+0

当你使用'dispatch_after()'的时候更清洁,因为它保存了一个方法并且保持触发和动作一起。 – 2015-12-23 08:37:51

相关问题