줄 바꿈으로 UITextView의 내용을 줄 배열로 가져 오는 방법이 있습니까?줄 배열로 UITextView 내용 가져 오기
나는 그것을 멍청한 방법으로 할 수 있었고 sizeWithFont를 사용하여 단어 단위로 단어를 측정하고 랩핑 할 수있는 부분을 보았지만 더 똑똑한 방법이 있기를 기대하고 있습니까?
건배
줄 바꿈으로 UITextView의 내용을 줄 배열로 가져 오는 방법이 있습니까?줄 배열로 UITextView 내용 가져 오기
나는 그것을 멍청한 방법으로 할 수 있었고 sizeWithFont를 사용하여 단어 단위로 단어를 측정하고 랩핑 할 수있는 부분을 보았지만 더 똑똑한 방법이 있기를 기대하고 있습니까?
건배
나는 attributeString을 사용할 수 있다고 생각합니다. 이것을 사용하여 다양한 문자 또는 단어에 대해 색상을 설정할 수 있습니다. textview에서 텍스트의 길이를 얻고 attributeString 작업을 수행하십시오.
나는 이렇게했으며 충분히 빠르다고합니다.
-(void) _printCharactersAndPositionsForLines:(UITextView*) textView{
NSString * text = textView.text;
if (text != nil){
float currentLineY = -1;
int currentLineIndex = -1;
for (int charIndex = 0; charIndex < [text length]; charIndex++){
UITextPosition *charTextPositionStart = [textView positionFromPosition:textView.beginningOfDocument offset:charIndex];
UITextPosition *charTextPositionEnd = [textView positionFromPosition:charTextPositionStart offset:+1];
UITextRange *range = [textView textRangeFromPosition:charTextPositionStart toPosition:charTextPositionEnd];
CGRect rectOfChar = [textView firstRectForRange:range];
if (rectOfChar.origin.y > currentLineY){
currentLineY = rectOfChar.origin.y;
currentLineIndex++;
// new line
NSLog(@"line [%i] starts with '%@' at character index %i",currentLineIndex,[text substringWithRange:NSMakeRange(charIndex, 1)],charIndex);
}
}
}
}
당신은 those.But은 IOS 7. 레이아웃 매니저의 방법을 사용할 수 있습니다 에서 사용할 수 TIS 얻을 수있는 textviews 레이아웃 매니저를 사용할 수 있습니다 - (enumerateLineFragmentsForGlyphRange을 : usingBlock을 :)
을 아래의 코드 인쇄 결과 >
_textView.text [email protected]"abcdsakabsbdkjflk sadjlkasjdlk asjkdasdklj asdpaandjs bajkhdb hasdskjbnas kdbnkja sbnkasj dbkjasd kjk aj";
NSLog(@"%d",_textView.text.length); // length here is 104.
[_textView.layoutManager enumerateLineFragmentsForGlyphRange:NSMakeRange(0, 104) usingBlock:^(CGRect rect, CGRect usedRect, NSTextContainer *textContainer, NSRange glyphRange, BOOL *stop) {
NSLog(@"rect %@ - usedRect %@ - glymph Rangle %d %d -",NSStringFromCGRect(rect),NSStringFromCGRect(usedRect),glyphRange.location,glyphRange.length);
}]
;
인쇄에서 그 결과>
2013-12-17 12:48:40.250 testEmpty[675:a0b] rect {{0, 0}, {200, 13.8}} - usedRect {{0, 0}, {176.08398, 13.8}} - glymph Rangle 0 31 -
2013-12-17 12:48:40.251 testEmpty[675:a0b] rect {{0, 13.8}, {200, 13.8}} - usedRect {{0, 13.8}, {182.11328, 13.8}} - glymph Rangle 31 31 -
2013-12-17 12:48:40.251 testEmpty[675:a0b] rect {{0, 27.6}, {200, 13.8}} - usedRect {{0, 27.6}, {168.75977, 13.8}} - glymph Rangle 62 28 -
2013-12-17 12:48:40.252 testEmpty[675:a0b] rect {{0, 41.400002}, {200, 13.8}} - usedRect {{0, 41.400002}, {82.035156, 13.8}} - glymph Rangle 90 14 -
때문에 블록의 각 실행에, u는 그 라인에 사용되는 문자열의 길이로 glymphRange.length을 얻을 것이다.
왜 그런 것이 필요한가요? 어떤 목적으로 그것을 필요로 하는가? –
UITextViews에서 단어 주위에 다른 색상의 UIView 상자로 주석을 달려고합니다. –
Charan Giri와 동의합니다. IOS의 속성 문자열을 사용하여 원하는 것을 얻을 수 있습니다. 속성이 지정된 문자열을 사용하여 쉽게이 작업을 수행 할 수 있습니다. –