2011-09-03 80 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

您需要将字体设置为“粗体”字体(例如“Helvetica”和“Helvetica-Bold”)。

  1. 使用您选择的粗体字体创建一个CTFont对象。
  2. 使用您的NSAttributedString的方法addAttribute:value:range:,为第一个参数传递“kCTFontAttributeName”,为第二个参数传递您的CTFont对象。
  3. 为避免泄漏请记住,如果CTFont对象是由名称中包含“create”的方法创建的,请释放它;使用CFRelease(CFType obj)
+0

你能告诉我代码吗? –