2013-12-17 2 views
0

줄 바꿈으로 UITextView의 내용을 줄 배열로 가져 오는 방법이 있습니까?줄 배열로 UITextView 내용 가져 오기

나는 그것을 멍청한 방법으로 할 수 있었고 sizeWithFont를 사용하여 단어 단위로 단어를 측정하고 랩핑 할 수있는 부분을 보았지만 더 똑똑한 방법이 있기를 기대하고 있습니까?

건배

+2

왜 그런 것이 필요한가요? 어떤 목적으로 그것을 필요로 하는가? –

+1

UITextViews에서 단어 주위에 다른 색상의 UIView 상자로 주석을 달려고합니다. –

+0

Charan Giri와 동의합니다. IOS의 속성 문자열을 사용하여 원하는 것을 얻을 수 있습니다. 속성이 지정된 문자열을 사용하여 쉽게이 작업을 수행 할 수 있습니다. –

답변

1

나는 attributeString을 사용할 수 있다고 생각합니다. 이것을 사용하여 다양한 문자 또는 단어에 대해 색상을 설정할 수 있습니다. textview에서 텍스트의 길이를 얻고 attributeString 작업을 수행하십시오.

0

나는 이렇게했으며 충분히 빠르다고합니다.

-(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); 
      } 
     } 
    } 
} 
1

당신은 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을 얻을 것이다.