Swift 属性标题语法
Posted
技术标签:
【中文标题】Swift 属性标题语法【英文标题】:Swift Attributed Title Syntax 【发布时间】: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 Text
,This is sample
是非粗体,Text
是粗体 @UmairAfzal
【参考方案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 在这里很重要吗?以上是关于Swift 属性标题语法的主要内容,如果未能解决你的问题,请参考以下文章
Swift 4 快捷语法将多个对象(设置了一些属性)添加到数组中?