원하는 앱의 초기 단계로서 단락을 들여 쓰는 간단한 테스트 예제를 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