作为应用程序的初步阶段,我设置了一个缩进UITextView
中段落的简单测试示例。它基本上用一些文本设置了一个NSTextStorage
,并将其放在文本视图中。当用户点击缩进按钮时,我希望与当前选区重叠的段落缩进。更改段落样式后重新绘制UITextView选择
不工作的部分工作是在段落缩进后,蓝色选择突出显示保留在该位置,并且不会移动到所选文本现在位于的位置。我错过了什么让这个刷新发生?
下面是缩进前工作部分的样子:
而且这里是相同的选择看起来像缩进后:
的缩进的代码:
UITextRange *startRange = [textView.tokenizer rangeEnclosingPosition:[textView selectedTextRange].start withGranularity:UITextGranularityParagraph inDirection:UITextStorageDirectionForward];
UITextRange *endRange = [textView.tokenizer rangeEnclosingPosition:[textView selectedTextRange].end withGranularity:UITextGranularityParagraph inDirection:UITextStorageDirectionBackward];
NSInteger startOffset = MIN([textView offsetFromPosition:textView.beginningOfDocument toPosition:startRange.start], [textView offsetFromPosition:textView.beginningOfDocument toPosition:endRange.start]);
NSInteger endOffset = MAX([textView offsetFromPosition:textView.beginningOfDocument toPosition:endRange.end], [textView offsetFromPosition:textView.beginningOfDocument toPosition:startRange.end]);
NSRange offsetRange = NSMakeRange(startOffset, endOffset - startOffset);
[self.textStorage beginEditing];
[self.textStorage enumerateAttribute:NSParagraphStyleAttributeName
inRange:offsetRange
options:0
usingBlock:^(id value, NSRange range, BOOL *stop) {
((NSMutableParagraphStyle *)value).firstLineHeadIndent += [self tabIndent];
((NSMutableParagraphStyle *)value).headIndent += [self tabIndent];
[self.textStorage removeAttribute:NSParagraphStyleAttributeName range:range];
[self.textStorage addAttribute:NSParagraphStyleAttributeName value:value range:range];
}];
[self.textStorage endEditing];
也许这是一个愚蠢的问题,但我会欣赏一个外部的眼睛。谢谢你的帮助!
您是否找到了解决方案? – matzino