Как я могу использовать CoreText для полужирного текста? - PullRequest
1 голос
/ 03 сентября 2011

Я изменяю найденный класс.Это подчеркивает гиперссылки.Я хотел бы, чтобы это также выделило гиперссылку.Я не уверен, как это сделать с 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 голос
/ 03 сентября 2011

Вам необходимо установить шрифт «Bold» (например, «Helvetica» и «Helvetica-Bold»).

  1. Создать объект CTFont, используя выбранный жирный шрифт.
  2. Используйте addAttribute:value:range: метод вашего NSAttributedString, передайте «kCTFontAttributeName» для первого параметра и свой объект CTFont для второго.
  3. Чтобы избежать утечек, не забудьте освободить объект CTFont, если он был созданметод, который имеет «создать» в своем имени;используйте CFRelease(CFType obj).
...