2012-10-19 32 views
14

Tôi đang đào vào NSAttributedString giây trên iOS. Tôi có một mô hình trả về một người và họ là NSAttributesString. (Tôi không biết nếu nó là một ý tưởng tốt để đối phó với chuỗi quy định trong các mô hình?) Tôi muốn tên đầu tiên được in thường xuyên, nơi như tên cuối cùng nên được in đậm. Điều tôi không muốn là đặt kích thước văn bản. Tất cả tôi tìm thấy cho đến nay là thế này:NSAttributedString thay đổi kiểu in đậm mà không thay đổi pointSize?

- (NSAttributedString*)attributedName { 
    NSMutableAttributedString* name = [[NSMutableAttributedString alloc] initWithString:self.name]; 
    [name setAttributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:[UIFont systemFontSize]]} range:[self.name rangeOfString:self.lastname]]; 
    return name; 
} 

Tuy nhiên, điều này sẽ, tất nhiên, ghi đè lên các cỡ chữ của tên cuối cùng, trong đó đưa ra một cái nhìn rất hài hước trong một UITableViewCell nơi tên đầu tiên sẽ được in trong kích thước văn bản thông thường của nhãn của ô và tên cuối cùng sẽ được in rất nhỏ.

Có cách nào để đạt được những gì tôi muốn không?

Cảm ơn sự giúp đỡ của bạn!

Trả lời

2

Thực hiện cuộc gọi ở trên từ mã ô bảng nhưng vượt qua kích thước phông chữ mong muốn bằng cách lấy kích thước phông chữ từ textLabel của ô.

+0

Tôi cố gắng đó, nhưng một UITableViewCell khởi tạo mới và sạch sẽ trả về 'pointSize'' 0.0f' cho 'textLabel' (có thể là phông chữ hoặc thậm chí textLabel trống)! Còn ý tưởng nào để sửa cái này nữa không? –

+3

Nếu bạn triển khai phương thức 'tableView: willDisplayCellAtIndexPath:' delegate, phông chữ nên được đặt và bạn có thể cập nhật phông chữ của mình ở đó. – rmaddy

1

Bạn đã thử đặt kích thước thành 0.0?

3

Sử dụng kỹ thuật từ this question:

UIFontDescriptor *fontDescriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleBody]; 
uint32_t existingTraitsWithNewTrait = UIFontDescriptorTraitBold; 
    fontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:existingTraitsWithNewTrait]; 
UIFont *updatedFont = [UIFont fontWithDescriptor:fontDescriptor size:0.0]; 
NSDictionary *attribs = @{NSFontAttributeName : updatedFont}; 
[mutableAttrString setAttributes:attribs range:result.range]; 
2

Dưới đây là một Swiftextension mà làm cho chữ in đậm, trong khi vẫn giữ font hiện tại thuộc tính (và kích thước văn bản).

public extension UILabel { 

    /// Makes the text bold. 
    public func makeBold() { 
     //get the UILabel's fontDescriptor 
     let desc = self.font.fontDescriptor().fontDescriptorWithSymbolicTraits(.TraitBold) 
     //Setting size to '0.0' will preserve the textSize 
     self.font = UIFont(descriptor: desc, size: 0.0) 
    } 

} 
2

Nếu bạn chỉ muốn Bold từ thứ hai trong một nhãn chuỗi, ví dụ đối với nhãn tên trong khi sử dụng mặc định iOS Hệ thống Fonts, tức là tiêu đề, hoặc tiêu đề vv

let s = "\(client.givenName) \(client.surname)" as NSString 

let myAttribute = [ NSFontAttributeName: UIFont.preferredFontForTextStyle(UIFontTextStyleTitle1) ] 
let myString = NSMutableAttributedString(string: "\(s)", attributes: myAttribute) 

let myRange = s.rangeOfString(client.surname) 
let desc = UIFont.preferredFontForTextStyle(UIFontTextStyleTitle1).fontDescriptor().fontDescriptorWithSymbolicTraits(.TraitBold) 
let new = UIFont(descriptor: desc, size: 0.0) 

myString.addAttribute(NSFontAttributeName, value: new, range: myRange) 

nameLabel.attributedText = myString 
+0

Bất kỳ cơ hội nào bạn có thể chia sẻ phiên bản này trong Obj-C? –

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