滚动UITextView以显示以编程方式添加的新文本

时间:2014-05-01 06:27:31

标签: ios cocoa-touch uiscrollview uitextview ios7.1

我有UITextView以编程方式添加文本。例如,粘贴粘贴板上的文本。所以我有以下内容:

UITextView* _pastedText;
_pastedText = [[UITextView alloc] initWithFrame:pastedTextFrame];
_pastedText.editable = NO;
_pastedText.selectable = NO;

当我以编程方式添加新文本时,文本视图将滚动到顶部(没有动画)。我没有触发这个卷轴;我认为这是默认行为?

如何让文本视图滚动以便新的下一个在视图中?

其他信息

我在这里看到了很多相关的问题/答案。我发布了这个问题,因为使用下面的代码,我看到了不受欢迎的行为。这是我正在使用的代码:

- (void)addText:(NSString*)text
{
    NSString* textToAdd = text;

    BOOL previouslyHadText = _pastedText.text.length > 0;
    if (previouslyHadText) {
        textToAdd = [NSString stringWithFormat:@"%@\n%@", _pastedText.text, text];
    }

    NSMutableParagraphStyle* paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.lineSpacing = _lineSpacing;
    NSDictionary *attribute = @{ NSParagraphStyleAttributeName : paragraphStyle,
                                 NSFontAttributeName : [UIFont systemFontOfSize:18.0] };

    _pastedText.attributedText = [[NSAttributedString alloc] initWithString:textToAdd attributes:attribute];

    if (previouslyHadText) {
        NSRange range = NSMakeRange(_pastedText.text.length - 1, 1);
        [_pastedText scrollRangeToVisible:range];
    }
}

我在这方面取得了一些成功,但看到以下错误/问题:

情景1:

  • 文字视图中包含文字,内容顶部可见
  • 我添加了文字并成功滚动查看新文字
  • 我手动滚动textview
  • 手动滚动后,如果我添加更多新文字,文字视图第一个会滚动到顶部(根据原始行为),然后我的显式滚动,滚动到底部

情景2:

  • 文字视图开始为空
  • 添加需要滚动文本视图的新文本;没有卷轴
  • 我手动滚动文字视图
  • 添加新文字;现在滚动确实发生,但遭遇场景1中的首要描述

我如何(我是否需要?)禁用隐式滚动(方案1)?

在手动滚动视图(方案2)之前,我需要做什么才能使滚动发生?

1 个答案:

答案 0 :(得分:0)

似乎你正在尝试做一些与我尝试here非常相似的事情,尽管你使用scrollRangeToVisible来进行滚动而不是使用contentOffset。

尽管如此,在您向其添加文本后TextView自动滚动的问题的潜在解决方案是在更新TextView时禁用setScrollEnabled。你已经试过了吗?

[_pastedText setScrollEnabled:NO];
    _pastedText.attributedText = [[NSAttributedString alloc] initWithString:textToAdd attributes:attribute];
[_pastedText setScrollEnabled:YES];