以编程方式设置文本时停止跳转UITextView [英] Stop UITextView from jumping when programmatically setting text

查看:117
本文介绍了以编程方式设置文本时停止跳转UITextView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须在滚动的UITextView中更新少量文本。我只会插入光标当前所在的字符,按下导航栏上的按钮我就会这样做。

I have to update a small amount of text in a scrolling UITextView. I'll only be inserting a character where the cursor currently is, and I'll be doing this on a press of a button on my navigation bar.

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

My problem is that whenever I call the setText method of the text view, it jumps to the bottom of the text. I've tried using contentOffset and resetting the selectedRange but it doesn't work! Here's my example:

// 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];

有没有办法可以在没有任何滚动动作的情况下更新文本...就好像他们一样只需在键盘上输入一些东西?

Is there any way you can update the text without any scroll movement at all... as if they'd just typed something on the keyboard?

编辑:

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

I've tried using the textViewDidChange: delegate method but it's still not scrolling up to the original location.

- (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或之后,你可以解决这个问题:

If you use iPhone 3.0 or later, you can solve this problem:

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

现在应该可以使用(不更多跳跃)

It should work now (no more jumping)

关心
Meir Assayag

Regards Meir Assayag

这篇关于以编程方式设置文本时停止跳转UITextView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆