ios swift: Is it possible to change the font style of a certain word in a string?

后端 未结 3 941
鱼传尺愫
鱼传尺愫 2020-12-03 12:38

I am extracting from a DB contents as strings. With a method I extract the longest word out of this string.

Now I would like to print out the entire string to a tex

相关标签:
3条回答
  • 2020-12-03 12:52

    You want to look at Attributed Strings and NSRange. You can use both of these together to create different styles for ranges in the string. Here is a snippet:

    myMutableString = NSMutableAttributedString(string: myString, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 18.0)!])
    
    //Add more attributes here:
    myMutableString.addAttribute(NSFontAttributeName, value: UIFont(name: "Chalkduster", size: 24.0), range: NSRange(location: 7,length: 5))
    myMutableString.addAttribute(NSFontAttributeName, value: UIFont(name: "AmericanTypewriter-Bold", size: 18.0)!, range: NSRange(location:2,length:4))
    myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:2,length:4))
    
    myMutableString.addAttribute(NSFontAttributeName, value: UIFont(name: "Georgia", size: 36.0)!, range: NSRange(location: 0, length: 1))
    myMutableString.addAttribute(NSStrokeColorAttributeName, value: UIColor.blueColor(), range:  NSRange(location: 0, length: 1))
    myMutableString.addAttribute(NSStrokeWidthAttributeName, value: 2, range: NSRange(location: 0, length: 1))
    
    myMutableString.addAttribute(NSBackgroundColorAttributeName, value: UIColor.greenColor(), range: NSRange(location: 0, length: myString.length))
    myLabel.backgroundColor = UIColor.grayColor()
    
    //Apply to the label
    myLabel.attributedText = myMutableString
    
    0 讨论(0)
  • 2020-12-03 12:58

    If you already know the longest word you have to get the range of that word in the string. I prefer the NSString method rangeOfString: for this.

    You then create a NSMutableAttributedString from the string, with your default attributes. Finally you apply highlighting attributes to the range you figured out earlier.

    let longString = "Lorem ipsum dolor. VeryLongWord ipsum foobar"
    let longestWord = "VeryLongWord"
    
    let longestWordRange = (longString as NSString).rangeOfString(longestWord)
    
    let attributedString = NSMutableAttributedString(string: longString, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(20)])
    
    attributedString.setAttributes([NSFontAttributeName : UIFont.boldSystemFontOfSize(20), NSForegroundColorAttributeName : UIColor.redColor()], range: longestWordRange)
    
    
    label.attributedText = attributedString
    

    Update for Swift 5.0

    let longestWordRange = (longString as NSString).range(of: longestWord)
    
    let attributedString = NSMutableAttributedString(string: longString, attributes: [NSAttributedStringKey.font : UIFont.systemFont(ofSize: 20)])
    
    attributedString.setAttributes([NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 20), NSAttributedStringKey.foregroundColor : UIColor.red], range: longestWordRange)
    

    Which looks like this in my playground:

    enter image description here

    0 讨论(0)
  • 2020-12-03 13:02

    NSMutableAttributedString.

    You create an NSMutableAttributedString and apply the effects you'd like with addAttributes:range.

    Then assign it to the attributedText property of your UILabel.

    0 讨论(0)
提交回复
热议问题