繁体   English   中英

更改段落样式后重新绘制UITextView选择

[英]Redrawing UITextView selection after changing paragraph style

作为我要制作的应用程序的初步阶段,我建立了一个简单的测试示例,以缩进UITextView的段落。 基本上,它NSTextStorage使用一些文本来设置NSTextStorage并将其置于文本视图中。 当用户点击缩进按钮时,我希望与当前选择重叠的段落缩进。

无效的部分是,将段落缩进后,蓝色选择突出显示将停留在该位置,并且不会移动到现在所选择的文本所在的位置。 我错过了什么来进行这种刷新?

缩进之前的工作部分如下所示:

在文本视图中显示所选文本的图像

这是缩进后相同选择的外观:

在此处输入图片说明

缩进的代码:

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

也许这是一个愚蠢的问题,但我希望能有一个外在的眼光。 谢谢你的帮助!

有点晚了,但也许对您或其他人有帮助。

您可以通过设置selectedTextRange来通过UITextInput-Protocol更改选择。

let beginning: UITextPosition = textView.beginningOfDocument
let start: UITextPosition = textView.positionFromPosition(beginning, offset: textView.selectedRange.location)
let end: UITextPosition = textView.positionFromPosition(start!, offset: textView.selectedRange.length)

textView.selectedRange = NSMakeRange(0, 0)
textView.selectedTextRange = textView.textRangeFromPosition(start!, toPosition: end!)

PS我的代码是用Swift编写的,但是我认为将其转换为目标c没问题,或者?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM