4

我需要在渲染之前捕获输入的文本,以便对其应用一些属性。

为此,我使用 UITextView 的委托方法 shouldChangeTextInRange 以及 NSAttributedString。到目前为止一切顺利,并且有效。

问题是,当 UITextView 获得一定数量的文本并开始滚动时,更改属性文本使其滚动到顶部,而下一个字符将使其滚动回末尾。

打字时,它一直在上下移动。

设置 textview.text,而不是属性文本,它可以工作 n

有什么建议吗?

提前致谢。

- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{

    NSAttributedString * newString = [[NSAttributedString alloc] initWithString:text attributes:nil];
    NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithAttributedString:_textView.attributedText];

    [string insertAttributedString:newString atIndex:range.location];

    textView.attributedText = string;

    range.location += text.length;

    textView.selectedRange = range;

    return NO;
}
4

2 回答 2

0

我不确定您的观点shouldChangeTextInRange,但要修复不希望的自动滚动,请尝试围绕textView.attributedTextwith的设置[textView setScrollEnabled:NO]

那是:

[textView setScrollEnabled:NO];
textView.attributedText = string;
range.location += text.length;
[textView setScrollEnabled:YES];
于 2013-03-20T21:14:27.107 回答
0
textView.layoutManager.allowsNonContiguousLayout = NO;

然后在更改属性文本时它不会滚动到顶部。这个对我有用。

于 2017-04-07T05:03:44.560 回答