-1

我正在尝试做这样的事情:

let introText = "This is sample "
let facebookText = "Text"
loginButton.setTitle("\(introText)\(facebookText)", forState: .Normal)
loginButton.addAttribute(NSFontAttributeName, value: UIFont(name: "Arial", size: 15.5)!, range: NSMakeRange(0, introText.characters.count))
loginButton.addAttribute(NSFontAttributeName, value: UIFont(name: "Arial-Bold", size: 15.5)!, range: NSMakeRange(introText.characters.count, facebookText.characters.count))
loginButton.addAttribute(NSForegroundColorAttributeName, value: UIColor.whiteColor(), range: NSMakeRange(0, introText.characters.count + facebookText.characters.count))

以这种形式:

loginButton.setAttributedTitle(NSMutableAttributedString(
    string: "\(introText)\(facebookText)",
    attributes: [
        // attributes go here
        NSForegroundColorAttributeName: UIColor.colorFromCode(0x151515),
    ]), forState: UIControlState.Normal)

我可以这样做吗?我无法弄清楚如何在包含的属性中包含范围。

编辑

抱歉,如果不是很明显,但是我的代码所做的是它创建了一个属性字符串,该字符串显示为“这是示例文本”,其中单词Text加粗,如图所示。如果可能的话,我正在尝试将这段代码重写为我展示的第二种语法的形式。

谢谢!

4

2 回答 2

0

据我了解您的问题,如果是,您希望将一部分测试设为粗体,那么这是我为此目的使用的扩展

import UIKit
import Foundation

extension String
{

static func makeTextBold(preBoldText:String, boldText:String, postBoldText:String, fontSzie:CGFloat) -> NSAttributedString {

    let boldAttrs = [NSFontAttributeName : UIFont(name: "HelveticaNeue-Bold", size: fontSzie) as? AnyObject]
    let attributedString = NSMutableAttributedString(string:boldText, attributes:boldAttrs as? [String:AnyObject])

    let lightAttr = [NSFontAttributeName : UIFont(name: "HelveticaNeue-Light", size: fontSzie) as? AnyObject]
    let finalAttributedText = NSMutableAttributedString(string:preBoldText, attributes:lightAttr as? [String:AnyObject])

    let postText = NSMutableAttributedString(string:postBoldText, attributes:lightAttr as? [String:AnyObject])

    finalAttributedText.appendAttributedString(attributedString)
    finalAttributedText.appendAttributedString(postText)
    // print(finalAttributedText)
    return finalAttributedText
}
}

所以基本上这个函数所做的就是你传递三个文本参数和一个字体大小参数,它将返回一个属性字符串。

这是您的案例的示例用法

myLabel.attributedText = String.makeTextBold("This is sample", boldText: "Text", postBoldText: "", fontSzie: 21)

输出将是

这是示例文本

我希望这能回答问题:-)

于 2016-09-20T05:11:08.630 回答
0

如果您正在寻找带有粗体部分的属性文本,这将为您完成。

extension String {

  func getPartOfStringBold(boldPart:String)-> NSAttributedString{
    return getPartOfStringBold(boldPart, font: UIFont(name: "Taz-Bold", size: 13)!)
 }

//Make your string bold
  func getPartOfStringBold(boldPart:String, font:UIFont)-> NSAttributedString{
    let attributtedString = NSMutableAttributedString(string: self)
    let attrs = [NSFontAttributeName:font]
    let rangePart: NSRange = (attributtedString.string as NSString).rangeOfString(boldPart)
    attributtedString.addAttributes(attrs, range: rangePart)
    return attributtedString
  }

//Make your string Italic
  func getPartOfStringItalic(italicPart:String)-> NSAttributedString{
    let attributtedString = NSMutableAttributedString(string: self)

    if let font = UIFont(name: "Taz-LightItalic", size: 13)
    {
        let attrs = [NSFontAttributeName:font, NSForegroundColorAttributeName:UIColor.blackColor()]
        let rangePart: NSRange = (attributtedString.string as NSString).rangeOfString(italicPart)
        attributtedString.addAttributes(attrs, range: rangePart)
    }
    return attributtedString
  }
}
于 2016-09-20T05:05:09.233 回答