我需要在渲染之前捕获键入的文本,以便为其应用一些属性。
为此我正在使用UITextView的委托方法shouldChangeTextInRange以及NSAttributedString。到目前为止一切都很好,而且很有效。
问题是,当UITextView获取一定数量的文本并开始滚动时,更改attributionText会使其滚动到顶部,而下一个char会使其滚动回到最后。
在打字时,它继续上下移动......
设置textview.text,而不是属性文本,它适用于
有什么建议吗?
提前致谢。
- (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;
}
答案 0 :(得分:0)
我不确定shouldChangeTextInRange
的重点,但要修复不受欢迎的自动滚动,请尝试使用textView.attributedText
围绕[textView setScrollEnabled:NO]
的设置。
那是:
[textView setScrollEnabled:NO];
textView.attributedText = string;
range.location += text.length;
[textView setScrollEnabled:YES];
答案 1 :(得分:0)
textView.layoutManager.allowsNonContiguousLayout = NO;
然后在更改attributedText时不会滚动到顶部。 它对我有用。