更改UIButton attributesStrings enumerateSubstrings字符串范围的标题

时间:2017-11-02 10:45:46

标签: ios swift uibutton nsattributedstring swift4

这个问题在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)` 

1 个答案:

答案 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))