iphone – 在编程设置文本时停止UITextView跳转

我必须在滚动的UITextView中更新少量的文本。我只会插入光标当前所在的字符,我将在导航栏上按一个按钮来完成此操作。

我的问题是,每当我调用文本视图的setText方法时,它将跳转到文本的底部。我已经尝试使用contentOffset并重新设置了selectedRange,但它不起作用!这是我的例子:

// Remember offset and selection
CGPoint contentOffset = [entryTextView contentOffset];
NSRange selectedRange = [entryTextView selectedRange];
// Update text
entryTextView.text = entryTextView.text;
// Try and reset offset and selection
[entryTextView setContentOffset:contentOffset animated:NO];
[entryTextView setSelectedRange: selectedRange];

有没有什么办法可以更新文本,而无需任何滚动运动,就好像他们刚刚在键盘上打了一些东西?

非常感谢,

迈克尔

编辑:

我尝试使用textViewDidChange:delegate方法,但仍然没有滚动到原始位置。

- (void)textViewDidChange:(UITextView *)textView {
    if (self.programChanged) {
        [textView setSelectedRange:self.selectedRange];
        [textView setContentOffset:self.contentOffset animated:NO];
        self.programChanged = NO;
    }
}

- (void)changeButtonPressed:(id)sender {
    // Remember position
    self.programChanged = YES;
    self.contentOffset = [entryTextView contentOffset];
    self.selectedRange = [entryTextView selectedRange];
    // Update text
    entryTextView.text = entryTextView.text;
}
如果您使用iPhone 3.0或更高版本,您可以解决这个问题:

textView.scrollEnabled = NO;

//You should know where the cursor will be(if you update your text by appending/inserting/deleting you can know the selected range) so keep it in a NSRange variable.

Then update text:
textView.text = yourText;

textView.scrollEnabled = YES;
textView.selectedRange = range;//you keep before

它应该现在工作(不再跳)

问候
Meir Assayag

翻译自:https://stackoverflow.com/questions/864069/stop-uitextview-from-jumping-when-programatically-setting-text

转载注明原文:iphone – 在编程设置文本时停止UITextView跳转