2011-09-03 6 views
1

발견 한 클래스를 수정 중입니다. 그것은 하이퍼 링크에 밑줄을 긋고 있습니다. 하이퍼 링크도 대담하게하고 싶습니다. CoreText로 어떻게해야할지 모르겠습니다.CoreText를 사용하여 텍스트를 굵게 표시하려면 어떻게해야합니까?

-(NSMutableAttributedString*)attributedTextWithLinks { 
    NSMutableAttributedString* str = [self.attributedText mutableCopy]; 
    if (!str) return nil; 

    if (self.automaticallyDetectLinks) { 
     NSError* error = nil; 
     NSDataDetector* linkDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error]; 
     [linkDetector enumerateMatchesInString:[str string] options:0 range:NSMakeRange(0,[[str string] length]) 
            usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) 
     { 
      int32_t uStyle = self.underlineLinks ? kCTUnderlineStyleSingle : kCTUnderlineStyleNone; 
      UIColor* thisLinkColor = (delegate && [delegate respondsToSelector:@selector(colorForLink:underlineStyle:)]) 
      ? [delegate colorForLink:result underlineStyle:&uStyle] : self.linkColor; 

      if (thisLinkColor) 
       [str setTextColor:thisLinkColor range:[result range]]; 
      if (uStyle>0) 
       [str setTextUnderlineStyle:uStyle range:[result range]]; 
     }]; 
    } 
    [customLinks enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) 
    { 
     NSTextCheckingResult* result = (NSTextCheckingResult*)obj; 

     int32_t uStyle = self.underlineLinks ? kCTUnderlineStyleSingle : kCTUnderlineStyleNone; 
     UIColor* thisLinkColor = (delegate && [delegate respondsToSelector:@selector(colorForLink:underlineStyle:)]) 
     ? [delegate colorForLink:result underlineStyle:&uStyle] : self.linkColor; 

     if (thisLinkColor) 
      [str setTextColor:thisLinkColor range:[result range]]; 
     if (uStyle>0) 
      [str setTextUnderlineStyle:uStyle range:[result range]]; 
    }]; 
    return [str autorelease]; 
} 

답변

1

당신은 "굵게"글꼴 (예 : '돋움'과 '헬 베티 - 굵게 ") 글꼴을 설정해야합니다.

  1. 선택한 굵은 글꼴을 사용하여 CTFont 개체를 만듭니다.
  2. NSAttributedString의 addAttribute:value:range: 메서드를 사용하고 첫 번째 매개 변수에는 "kCTFontAttributeName"을 전달하고 두 번째 매개 변수에는 CTFont 객체를 전달하십시오.
  3. 누출을 방지하려면 CTFont 객체가 이름에 "create"메소드를 사용하여 생성 된 경우이를 해제해야합니다. CFRelease(CFType obj)을 사용하십시오.
+0

코드로 표시 할 수 있습니까? –

관련 문제