2

作りたいアプリの準備段階として、段落をインデントする簡単なテスト例を設定しましたUITextView。基本的に、いくつかのテキストで をセットアップし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];

ばかげた質問かもしれませんが、よろしければご覧いただければ幸いです。ご協力いただきありがとうございます!

4

1 に答える 1

1

少し遅れていますが、あなたや他の人に役立つかもしれません....

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 に変換しても問題ないと思いますか?

于 2014-10-28T15:25:34.017 に答える