2012-07-22 3 views
0

내 프로그램에 구문 강조를 추가하려고합니다.
나는 하이라이트를 추가하려면이 코드를 사용하고 있습니다 :UITextView에서 UILabels이 올바르게 오버레이되지 않음

-(void)highlightWord:(NSString *)word: (UIColor *)color { 
    int amount = textDisplay.text.length; 
    NSString *newString = textDisplay.text; 
    NSUInteger count = 0, length = amount; 
    NSRange range = NSMakeRange(0, length); 
    while(range.location != NSNotFound) 
    { 
     range = [textDisplay.text rangeOfString: word options:NSLiteralSearch range:range]; 
     if(range.location != NSNotFound) 
     { 
      range = NSMakeRange(range.location + range.length, length - (range.location + range.length)); 
      count++; 
     } 
    } 
    while (count != 0) { 
     count--; 
     NSRange highlight = [newString rangeOfString:word]; 
     newString = [textDisplay.text stringByReplacingCharactersInRange:highlight withString:@" "]; 
     UILabel *view1 = [[UILabel alloc] initWithFrame:[self frameOfTextRange:highlight inTextView:textDisplay]]; 
     view1.text = word; 
     view1.textColor = color; 
     view1.font = [UIFont fontWithName:@"System" size: 14.0]; 
     view1.backgroundColor = [UIColor clearColor]; 
     view1.textAlignment = UITextAlignmentLeft; 
     [textDisplay addSubview:view1]; 
    } 

} 

- (IBAction)highlighString:(id)sender { 

    for (UIView *subview in [textDisplay subviews]){ 
     if ([subview isKindOfClass:[UILabel class]]){ 
      [subview removeFromSuperview]; 
     } 
    } 

    [self highlightWord:@"test" :[UIColor blueColor]]; 
    [self highlightWord:@"this" :[UIColor redColor]]; 
    [self highlightWord:@"is" :[UIColor grayColor]]; 
    [self highlightWord:@"a" :[UIColor greenColor]]; 
} 
@end 

을하지만이 이상한 결과를 초래할 것 :
...


원하는 결과를이 원활 색깔의 레이블을 겹쳐 있다는 것입니다.

+0

UITextView에서 레이블 (글꼴에 다른 글꼴 또는 속성이있을 수 있음)을 던지면 항상 거추장 스럽거나 위험 할 수 있습니다. 왜 [속성 문자열을 허용하는 UITextView 대체] (http://stackoverflow.com/a/8961839/981049)를 사용하지 않을까요? –

+0

필자는 필자가 필요로하는 것을 복사하고 붙이기 만하면되지만, 그 밖의 모든 것이 실패하면 나는 이것을 사용할 수있다. – Sirens

+0

이 작업을 수행하는 방법이 너무 복잡합니다. 내가 당신에게로 연결시켜 줄께 -> http://stackoverflow.com/questions/2218415/nstextview-syntax-highlighting 원인 문자열 사용 –

답변

0

UILabelUITextView을 혼합하면 쉽게 복사하여 붙여 넣기가 어려울 수 있습니다. 흥미로운 아이디어이지만 원활하게 작동하면 놀랄 것입니다. iOS의 모든 베타 버전이 아닌이 문제에 대한 일반적인 Apple 솔루션은 UIWebView을 사용하는 것입니다. Cocoanetics에는 DTRichTextEditor이라는 리뷰가 있습니다. DTCoreText에 대한 작업의 품질에 기반하여 (i가 매우 감동했습니다), iOS 5에 대한 기대감이 높습니다. 베타는 NDA를 받고 있지만, WWDC 2012의 세션 220을보고 더 많은 미래를내는 정보를 얻고 싶습니다.

특정 버그는 레이블을 하위보기로 텍스트보기에 추가한다는 것입니다. 당신은 동료들과 마찬가지로 텍스트보기 위에 그것들을 놓아야합니다. 그들을 textview에 넣으면 텍스트 뷰의 그리기 시스템이 적용됩니다. 물론 텍스트보기 위에 올려 놓으면 복사 및 붙여 넣기를 처리하기가 어려워집니다. 어떻게 든 터치를 통과시킨 다음 선택 물을 정확하게 그려야합니다. 이전 단락을 참조하십시오.

완전히 편집 가능한 서식있는 텍스트보기가 일부 레이블로 해킹하기 쉬운 경우 GitHub에서 여러 가지 구현을 찾을 수 있습니다. 불행히도 실제로는 잘하기가 어렵습니다. 나는 그것을 복용 Cocoanetics에 굴복; 나는 꽤 빨리 포기했다. 문제를 일반 텍스트가 아닌보기로 단순화 할 수 있다면이 방법이 가능할 수도 있지만 DTRichTextEditor 또는 UIWebView을 조사하는 것이 좋습니다. WWDC 2011에서 세션 511 "iOS의 Safari에서 서식있는 텍스트 편집"을 참조하십시오.

관련 문제