【问题标题】:Swift Attributed Title SyntaxSwift 属性标题语法
【发布时间】:2016-09-20 04:44:08
【问题描述】:

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

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 加粗,如图所示。如果可能的话,我正在尝试将这段代码重写为我展示的第二种语法的形式。

谢谢!

【问题讨论】:

  • 你想用属性文本做什么?
  • “难以弄清楚如何在包含的属性上包含范围”是什么意思?有什么问题?
  • 我无法在第二种形式中包含范围。我一直在玩弄语法,但似乎无法包含它。我搜索了文档,但在第二种形式中我看不到任何包含范围等属性的东西,所以我不确定你是否可以这样做@NazmulHasan
  • 你想在你的按钮中设置范围吗?
  • 我想要的输出是 This is sample TextThis is sample 是非粗体,Text 是粗体 @UmairAfzal

标签: ios swift swift2 swift3 swift2.3


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    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)
    

    输出将是

    这是示例文本

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

    【讨论】:

    • 这是我在 Umair 之前回答的问题。你没看到我的回答吗?回答前请先看看答案
    • @GaneshKumar 我已经发布了我用过并发现有用的东西。他/她选择哪个答案是OP的选择。干杯:-)
    • 我同意这一点。但答案应该有不同的方法吧?
    • 是的。你正在使用 NSRange 而我没有。
    • NSRange 在这里很重要吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多