Как я могу использовать 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 ответ
Решение
Вам необходимо установить шрифт "Bold" (например, "Helvetica" и "Helvetica-Bold").
- Создайте объект CTFont, используя выбранный жирный шрифт.
- использование
addAttribute:value:range:
метод вашего NSAttributedString, передайте "kCTFontAttributeName" для первого параметра и ваш объект CTFont для второго. - Чтобы избежать утечек, не забудьте освободить объект CTFont, если он был создан методом с именем "create"; использование
CFRelease(CFType obj)
,