2010-09-07 144 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

相關問題