这个问题在SO上有一些变化 - 但似乎没有一个对Swift 4的最新答案...我想设置一个UIButton的标题,其中一个属性字符串包含一部分字符串大胆而不是部分。我正在尝试基于Swift 4中新范围的代码。 但代码似乎不会影响子字符串。有人有这个工作吗?`
ls -1U | wc -l
正如@larme所说,BOLD Text是两个字。
所以我最终使用了这个:
let text = NSLocalizedString(" BOLD TEXT not \r\n bold text", comment: "")
let attributedString = NSMutableAttributedString(string: text)
text.enumerateSubstrings(in: text.startIndex..<text.endIndex, options: .byWords) {
(substring, substringRange, _, _) in
if substring == "BOLD TEXT" {
attributedString.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: 30),
range: NSRange(substringRange, in: text))
}
}
cell.multiFunctionButton.setAttributedTitle(attributedString, for: .normal)`
答案 0 :(得分:1)
如果您将其添加到您的代码段中:
(substring, substringRange, _, _) in
print(substring)
if substring == "BOLD TEXT" {
您将在控制台中看到永远不会执行if
子句,因为您的子字符串永远不会与“BOLD TEXT”匹配:
Optional("BOLD")
Optional("TEXT")
Optional("not")
Optional("bold")
Optional("text")
获取一系列“BOLD TEXT”使用let subtringRange = str.range(of: "BOLD TEXT")
因此,为按钮准备属性字符串的正确解决方案是:
let text = NSLocalizedString(" BOLD TEXT not \r\n bold text", comment: "")
let attributedString = NSMutableAttributedString(string: text)
guard let substringRange = text.range(of: "BOLD TEXT") else {
return
}
attributedString.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: 30),
range: NSRange(substringRange, in: text))