2012-04-09 7 views
6

Фон: Я пытаюсь отобразить предложение с жирным шрифтом и курсивным шрифтом, а также с обычными.iOS: Полужирный и курсив на одном и том же слове

Вопрос: Как я могу показать что-то вроде этого «Привет, меня зовут Байт». Обратите внимание, что байт выделен жирным шрифтом и курсивом, в то время как другие слова остаются нормальными.

Я пробовал: Я думаю, что coreText должен уметь что-то делать по линии, я просто не смог найти правильный способ сделать это. Я также использовал TTTAttributeLabel и не могу сделать его полужирным и курсивным. У меня загружен Three20, просто не знаю, что и что использовать. Webview не работает с моим фоном.


В ответ на Карлес Estevadeordal:

UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectMake(10, 360, 300, 40)]; 
[webView setBackgroundColor: [UIColor clearColor]]; 
[webView loadHTMLString:[NSString stringWithFormat:@"<html><body style=\"background-color: transparent;\">Hello, my name is <b><i>Byte</b></i></body></html>"] baseURL:nil]; 
[self.view addSubview:webView]; 

Это именно код, который я использовал. Он отображает белый фон.

+0

Я считаю, что вы можете использовать CTFFontDescriptors для corteext, чтобы получить нужный эффект. http://developer.apple.com/library/ios/#documentation/Carbon/Reference/CTFontDescriptorRef/Reference/reference.html Я не уверен в деталях, как это работает. – Joel

+0

TTTAttributeLabel наиболее определенно может иметь как жирный курсив. –

+0

@AlastairStuart У вас есть пример, потому что я потратил немало времени, пытаясь понять TTTAttributeLabel и ничего не придумал. – Byte

ответ

7

После хорошего ночного сна я нашел способ сделать это, используя TTTAtributedlabel. Вот как:

TTTAttributedLabel *attLabel = [[TTTAttributedLabel alloc]initWithFrame:CGRectMake(x, y, xx, yy)]; 
NSString *text = @"Hello, my name is Byte"; 

[attLabel setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:^(NSMutableAttributedString *mutableAttributedString) { 

    //font helvetica with bold and italic 
    UIFont *boldSystemFont = [UIFont fontWithName:@"Helvetica-BoldOblique" size:10]; 

    CTFontRef font = CTFontCreateWithName((__bridge CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL); 

    NSRange boldRange = [[mutableAttributedString string] rangeOfString:@"Byte" options:NSCaseInsensitiveSearch]; 
    [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)font range:boldRange]; 

    CFRelease(font); 

    return mutableAttributedString; 
}]; 

Я до сих пор не имеют способ добавить 2 атрибутов (то есть: жирный и курсивный отдельно) в то же самое слово/письмо. Но это делает трюк.

+0

Эта библиотека намного лучше, чем использование uiwebview, если вы просто хотите выделить жирный и курсивный! –

+0

Вы забыли освободить объекты? –

+1

в автоматическом подсчете ссылок? – Byte

0

Если предложение имеет фиксированный формат, самым простым решением является использование 2 разных UILabels, один с обычным шрифтом, а другой с жирным шрифтом и курсивным шрифтом.

Если предложение является динамическим, то вы должны использовать объект UIWebView, как это было lavel и загрузить простой веб-страницы с текстом и < б> < I> </I> </B> поля устанавливается на месте если вы хотите его полужирным и курсивом:

[myWebViewLabel loadHTMLString:[NSString stringWithFormat:@"<html><body style=\"background-color: transparent;\">Hello, my name is <b><i>Byte</b></i></body></html>"] baseURL:nil]; 

Надеюсь, это поможет.

+0

Спасибо за ваш вклад.Насколько мне нравится простота, я не могу заставить фон быть прозрачным. Я что-то упускаю? – Byte

+0

Да, вам нужно сделать: [myWebViewLabel setBackgroundColor: [UIColor clearColor]]; –

+0

Извините, по-прежнему показывает белый фон. Он работает с вами? – Byte

1

Чтобы добавить два атрибута (это не код ARC):

#define kLabelFontSize 16.0 

NSString labelString = @"Let's slide loudly"; 

[self.tttLabel setText:labelString afterInheritingLabelAttributesAndConfiguringWithBlock:^NSMutableAttributedString *(NSMutableAttributedString *mutableAttributedString) { 

    UIFont *boldSystemFont = [UIFont boldSystemFontOfSize:kLabelFontSize]; 
    CTFontRef boldFont = CTFontCreateWithName((CFStringRef)boldSystemFont.fontName, boldSystemFont.pointSize, NULL); 
    if (boldFont) { 
     [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(id)boldFont range:NSMakeRange(6, 11)]; 
     CFRelease(boldFont); 
    } 

    UIFont *italicSystemFont = [UIFont italicSystemFontOfSize:kLabelFontSize]; 
    CTFontRef italicFont = CTFontCreateWithName((CFStringRef)boldSystemFont.fontName, italicSystemFont.pointSize, NULL); 
    if (italicFont) { 
     [mutableAttributedString addAttribute:(NSString *)kCTFontAttributeName value:(id)italicFont range:NSMakeRange(12, 18)]; 
     CFRelease(italicFont); 
    } 

    }]; 

    return mutableAttributedString; 
}]; 
+1

Это правильно, но не на вопрос, который я задал. 2 атрибута не относятся к одному слову. (6-11) (12-18). Спасибо за вклад. – Byte

+0

Извинения за неправильное понимание вопроса. –

2

В случае, если вы все еще заинтересованы в решении CoreText к этому вопросу:

newFont = CTFontCreateCopyWithSymbolicTraits(fontRef, 
              self.textSize, 
              NULL, 
              kCTFontBoldTrait | kCTFontItalicTrait, 
              kCTFontBoldTrait | kCTFontItalicTrait); 

[attrString addAttribute:(NSString*)kCTFontAttributeName 
        value:(id)newFont 
        range:[copyString rangeOfString:customText.text]]; 
+0

Как вы можете расширить эту функцию для использования в качестве функции, чтобы добавить: * 'kCTFontBoldTrait' * и *' kCTFontItalicTrait' * на лету? –

2

Вы можете использовать это, где отправитель является экземпляром UIButton

sender.titleLabel.font=[UIFont fontWithName:@"Helvetica-BoldOblique" size:18.0f]; 
Смежные вопросы