2010-09-07 9 views
6

Korzystając z poniższego kodu, wstawiam tekst z pliku plist do textView. TextView nie jest jeszcze firstresponder; tekst jest początkowo tylko do odczytu. W iOS4 kod goToEndOfNote ustawia kursor na końcu tekstu I przewija do tej pozycji. W 3.1.3 nie przewija się do końca, dopóki ekran nie zostanie dotknięty (co nie jest wymagane, chyba że wymagana jest zmiana lub dodanie), co powoduje, że textView jest pierwszym respondentem. Chciałbym, żeby działało w wersji 3.1.3, tak jak w wersji 4.0. Wszelkie pomysły proszę. Dzięki.Umieść kursor na końcu tekstu w uitextview i przejdź do pozycji

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

Odpowiedz

3

używam setContentOffset:animated aby przewinąć do góry UITextView w jednej z moich aplikacji. Powinien również pracować nad przewijaniem do dołu. Spróbuj:

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

Można też owinąć się, że tak to się dzieje tylko na 3.1.3 i poniżej:

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

Prawie, ale nie do końca. Widok tekstowy to większość ekranu. W wersji 4.0 linia add'l [textView setContentOffset: CGPointMake (0, długość) animowana: TAK]; powoduje, że ostatni znak przewija się do dołu textView (dobrze). W 3.1.3 powoduje, że ostatni znak jest przewijany do około połowy drogi na ekranie (ok), ale w obu wersjach systemu operacyjnego, jeśli na ekranie jest tylko 1 lub 2 linie, są one przewijane poza ekranem (nie tak dobry). Wolałbym przewijanie, aby zacząć dopiero po wyświetleniu ekranu (tak jak w wersji 4.0 z tylko dwoma oryginalnymi liniami w mojej metodzie). –

2

Nie jestem pewien, czy jest to odpowiedź, ale to działa.

W 3.1.3, z oryginalnym kodem, kursor był na końcu, ale przewijanie było na górze. W wersji 4.0 oba były na dole.

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

Następnie zauważyć, że w 3.1.3 przełączenie 0 i długości, zwój na dnie, lecz był kursor na szczycie.

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

Łączenie obu działało. Przewija do dołu NSMakeRange (0, długość), prawdopodobnie do końca zakresu, wówczas NSMakeRange (długość, 0) umieszcza kursor tam, wszystko bez zmian, aby to, co robi w 4,0

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

You może użyć [UITextView -setSelectedRange:], aby ustawić zakres (location = TEXT_VIEW_STRING_LENGTH, długość = 0), aby ustawić kursor na końcu tekstu, a następnie wywołać [UITextView -scrollRangeToVisible:] z tym samym zakresem, aby przewinąć kursor do widocznego.

1

Jest późno, ale znalazłem rozwiązanie do tego. potrzebuje trochę hackowania:

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

Znacznie czystsze, gdy używasz 'dispatch_after()', ponieważ zapisuje metodę i utrzymuje razem spust i akcję. –

Powiązane problemy