2012-03-01 38 views
8

Tôi đang tạo ứng dụng iOS có nhãn. Tôi muốn đặt hai màu. Một cho phần đầu tiên và màu sắc khác cho phần còn lại.
Tôi đã nhìn thấy một số thư trong Stack over flow, TTTAttributedLabel có khả năng đặt nhiều màu thành văn bản. Văn bản của tôi sẽ giống như "ABC> def". Đối với "ABC", tôi muốn đặt màu nâu và "def", tôi muốn đặt màu trắng.
Tôi làm cách nào để thiết lập điều đó?iOS - Sử dụng TTTAttributedLabel để đặt hai văn bản màu

Trả lời

16
NSString* text = @"ABC > def"; 
attributedLabel = [[[TTTAttributedLabel alloc] initWithFrame:frame] autorelease]; 
attributedLabel.numberOfLines = 0; 
attributedLabel.lineBreakMode = UILineBreakModeWordWrap; 
attributedLabel.fontColor = [UIColor brownColor]; 
[attributedLabel setText:text afterInheritingLabelAttributesAndConfiguringWithBlock:^(NSMutableAttributedString *mutableAttributedString) { 
    NSRange whiteRange = [text rangeOfString:@"def"]; 
    if (whiteRange.location != NSNotFound) { 
    // Core Text APIs use C functions without a direct bridge to UIFont. See Apple's "Core Text Programming Guide" to learn how to configure string attributes. 
     [mutableAttributedString addAttribute:(NSString *)kCTForegroundColorAttributeName value:(id)[UIColor whiteColor].CGColor range:whiteRange]; 
    } 

    return mutableAttributedString; 
}]; 

[attributedLabel sizeToFit]; //this may not be needed if the frame provided is large enough 

Tìm kiếm "def" trong chuỗi của bạn và đặt màu nền trước của văn bản thành màu trắng cho phạm vi đó. Hi vọng điêu nay co ich. Tôi chỉ mới học được điều này ngày hôm qua. Đến câu hỏi của bạn trong khi cố gắng tìm ra nó cho bản thân mình.

+0

đừng quên trả lại mutableAttributedString ở cuối khối. – djibouti33

+0

@ djibouti33 cảm ơn, không biết làm thế nào tôi bỏ lỡ điều đó. Đã chỉnh sửa câu trả lời để bao gồm điều đó ngay bây giờ. – DonnaLea

6

Bạn có thể sử dụng TTTRegexAttributedLabel có sẵn tại: https://github.com/kwent/TTTRegexAttributedLabel. (Dựa trên TTTAttributedLabel nhưng dễ sử dụng hơn với các cụm từ thông dụng)

//SET FONT ONLY ON FIRST MATCH REGEX 
    TTTRegexAttributedLabel *label = [[TTTRegexAttributedLabel alloc] init]; 
    label.textColor = [UIColor whiteColor]; 
    NSString *s = @"ABC > def"; 
    [self.label setText:s withFirstMatchRegex:@"^[a-zA-Z ]*>" 
         withFont:[UIFont systemFontOfSize:12] 
         withColor:[UIColor brownColor]]; 
+4

Cảm ơn bạn đã cung cấp câu trả lời. Vấn đề của tôi được giải quyết bằng cách sử dụng TTTAttributedLabel. Trong tương lai, tôi sẽ ghi nhớ sử dụng thư viện mà bạn đề nghị. – Satyam

Các vấn đề liên quan