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

私は自分のアプリの 1 つで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); 

2つを組み合わせるとうまくいきました。おそらく範囲の終わりまで一番下の 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

遅くなりましたが、これに対する有効な解決策を見つけました。少しハックが必要です

- (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 に答える