2017-11-02 4 views
0

SOのこの質問にはいくつかのバリエーションがありますが、Swift 4の最新の回答はないようです... UIButtonのタイトルを文字列の一部を太字で示し、一部ではない属性付き文字列。私はSwift 4の新しい範囲に基づいてこのコードを試しています。 しかし、コードは部分文字列に影響しないようです。誰でもこれが働いていますか? 'UIButtonのタイトルを変更するattributedStrings enumerateSubstrings文字列の範囲

 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)` 

@larmeはBOLDの下に2つの単語があります。

let str = NSString(string: text) 
let theRange = str.range(of: "BOLD TEXT") 
let attribute = [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 20), 
       NSAttributedStringKey.foregroundColor: UIColor.red] 
attributedString.addAttributes(attribute, range: theRange) 
+1

印刷 'substring'、あなたはなぜそれがかもしれ表示されますうまくいかない。あなたは単語を列挙していますが、 "BOLD TEXT"は2単語なので、 'substring'は" BOLD TEXT "と決して等しくないかもしれません。さて、あなたはlocalizedStringを使用しているので、私は "may"を使用しましたが、その背後にある値は何か分かりません。 – Larme

+0

あなたが期待する正確な結果 - ここでスナップショット(画像)を共有してより良いヘルプを得る – Krunal

答えて

1

あなたのスニペットにこれを追加した場合::

は、だから私は、この使用して終了し、あなたの部分文字列は決してありませんので、あなたは、if句が実行されることはありませんコンソールに表示されます

 (substring, substringRange, _, _) in 
     print(substring) 
     if substring == "BOLD TEXT" { 

「BOLD TEXT」との一致:

Optional("BOLD") Optional("TEXT") Optional("not") Optional("bold") Optional("text") 0ボタンがあるために起因する文字列を準備するために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)) 
関連する問題