2012-04-09 31 views
6

Bối cảnh: Tôi đã cố gắng hiển thị một câu có phông chữ đậm và nghiêng cũng như các câu bình thường.iOS: Chữ đậm và nghiêng trên cùng một từ

Câu hỏi: Làm thế nào tôi có thể hiển thị một cái gì đó như thế này "Xin chào, tôi tên là Byte". Lưu ý rằng Byte vừa đậm vừa nghiêng, trong khi các từ khác vẫn bình thường.

Tôi đã thử: Tôi nghĩ coreText sẽ có thể thực hiện điều gì đó dọc theo dòng, tôi chỉ không thể tìm được cách chính xác để thực hiện. Tôi cũng đã sử dụng TTTAttributeLabel và không thể làm cho cả chữ đậm và nghiêng. Tôi có ba20 nạp, chỉ không biết cái gì hoặc những gì để sử dụng. Webview không hoạt động với nền của tôi.


Là một trả lời cho Carles 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]; 

Đây chính là mã, tôi đã sử dụng. Nó hiển thị nền trắng.

+0

Tôi tin rằng bạn có thể sử dụng CTFFontDescriptors cho coretext để có được hiệu ứng bạn muốn. http://developer.apple.com/library/ios/#documentation/Carbon/Reference/CTFontDescriptorRef/Reference/reference.html Tôi không chắc chắn về chi tiết về cách hoạt động của tính năng này. – Joel

+0

TTTAttributeLabel chắc chắn nhất có thể in đậm cả chữ in nghiêng. –

+0

@AlastairStuart Bạn tình cờ có một ví dụ vì tôi đã dành khá nhiều thời gian để hiểu TTTAttributeLabel và không có gì. – Byte

Trả lời

7

Sau một đêm ngon giấc, tôi đã tìm cách để thực hiện việc đó bằng cách sử dụng TTTAtributedlabel. Sau đây là cách:

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; 
}]; 

tôi vẫn không có một cách để thêm 2 thuộc tính (ví dụ: đậm và nghiêng riêng) vào cùng một từ/lá thư. Nhưng điều này làm các trick.

+0

Thư viện đó tốt hơn nhiều so với sử dụng uiwebview nếu bạn chỉ muốn in đậm và in nghiêng! –

+0

Bạn có quên phát hành đồ vật không? –

+1

trong tính toán tham chiếu tự động? – Byte

0

Nếu câu có định dạng cố định, giải pháp đơn giản nhất là sử dụng 2 UILabels khác nhau, một với phông chữ thông thường và phông còn lại có phông chữ In đậm và In nghiêng.

Nếu câu là động thì bạn nên sử dụng một đối tượng UIWebView như nó đã được một lavel và tải một trang web đơn giản với văn bản của bạn và b> < i> </i> </b> Trường < đặt ở vị trí khi bạn muốn chữ đậm và nghiêng như sau:

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

Tôi hy vọng điều đó sẽ hữu ích.

+0

Cảm ơn sự đóng góp của bạn.Nhiều như tôi thích sự đơn giản, tôi không thể có được nền tảng trong suốt. Tui bỏ lỡ điều gì vậy? – Byte

+0

Có, bạn phải làm: [myWebViewLabel setBackgroundColor: [UIColor clearColor]]; –

+0

Rất tiếc, vẫn hiển thị nền trắng. Nó có hoạt động với bạn không? – Byte

1

Để thêm hai thuộc tính (điều này là mã ARC phi):

#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

Điều này đúng, nhưng không đúng với câu hỏi tôi đã hỏi. 2 thuộc tính không có cùng một từ. (6-11) (12-18). Cảm ơn sự đóng góp. – Byte

+0

Xin lỗi vì đã hiểu sai câu hỏi. –

2

Trong trường hợp bạn vẫn còn quan tâm đến một giải pháp CoreText đến vấn đề này:

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

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

Cách bạn có thể mở rộng mục này để sử dụng làm chức năng để thêm: * 'kCTFontBoldTrait' * và *' kCTFontItalicTrait' * khi đang di chuyển? –

2

Bạn có thể sử dụng này, nơi người gửi là trường hợp của UIButton

sender.titleLabel.font=[UIFont fontWithName:@"Helvetica-BoldOblique" size:18.0f]; 
Các vấn đề liên quan