2015-12-02 70 views
5

文字間隔をUILabel(here)に設定する方法を見つけましたが、この方法はUIButtonでは機能しません。誰もそれを行う方法を知っていますか? 'NSConcreteAttributedString' (0x19e508660) to 'NSMutableAttributedString' (0x19e506a40).SwiftでUIButtonの文字間隔を変更する方法は?

+0

:ここでは、更新スウィフト3溶液が来ますか?あなたのために働いていないコードを投稿してください。 –

+0

破損したコードを表示するために更新されました。 –

答えて

10
  1. 質問に、あなたのUIButton
  2. コールsetAttributedTitle(_ ,forState:)をリンクのようなNSAttributedStringを行います。ここでは

    は、私はそれは私にエラーをスロー

    let buttonString = agreementButton.attributedTitleForState(.Normal) as! NSMutableAttributedString 
        buttonString.addAttribute(NSKernAttributeName, value: 1.0, range: NSMakeRange(0, buttonString.length)) 
        agreementButton.setAttributedTitle(buttonString, forState: .Normal) 
    

    を使用しているコードです


は(未テスト)これを試してみてください:

let title = agreementButton.titleForState(.Normal) 
let attributedTitle = NSAttributedString(string: title, attributes: [NSKernAttributeName: 1.0]) 
agreementButton.setAttributedTitle(attributedTitle, forState: .Normal) 
+0

完了。私はコードとエラーで質問を更新しました。 –

+0

いいえ、エラー:タイプ 'UIButton'の値にメンバー 'setAttributedTitleForState'がありません –

+0

私の悪いです。 'setAttributedTitle'だったはずです。編集済み –

2

Code Differentからソリューションは、テキストの色の設定を尊重しません。また、ストーリーボードでもspacingパラメータを使用できるようにUIButtonクラスをオーバーライドできます。

スウィフト3

class UIButtonWithSpacing : UIButton 
{ 
    override func setTitle(_ title: String?, for state: UIControlState) 
    { 
     if let title = title, spacing != 0 
     { 
      let color = super.titleColor(for: state) ?? UIColor.black 
      let attributedTitle = NSAttributedString(
       string: title, 
       attributes: [NSKernAttributeName: spacing, 
          NSForegroundColorAttributeName: color]) 
      super.setAttributedTitle(attributedTitle, for: state) 
     } 
     else 
     { 
      super.setTitle(title, for: state) 
     } 
    } 

    fileprivate func updateTitleLabel_() 
    { 
     let states:[UIControlState] = [.normal, .highlighted, .selected, .disabled] 
     for state in states 
     { 
      let currentText = super.title(for: state) 
      self.setTitle(currentText, for: state) 
     } 
    } 

    @IBInspectable var spacing:CGFloat = 0 { 
     didSet { 
      updateTitleLabel_() 
     } 
    } 
} 
6

スウィフト3.0まさに問題である

extension UIButton{ 
    func addTextSpacing(spacing: CGFloat){ 
     let attributedString = NSMutableAttributedString(string: (self.titleLabel?.text!)!) 
     attributedString.addAttribute(NSKernAttributeName, value: spacing, range: NSRange(location: 0, length: (self.titleLabel?.text!.characters.count)!)) 
     self.setAttributedTitle(attributedString, for: .normal) 
    } 
} 
btnRegister.addTextSpacing(spacing: 4.5) 

extension UILabel{ 
    func addTextSpacing(spacing: CGFloat){ 
     let attributedString = NSMutableAttributedString(string: self.text!) 
     attributedString.addAttribute(NSKernAttributeName, value: spacing, range: NSRange(location: 0, length: self.text!.characters.count)) 
     self.attributedText = attributedString 
    } 
} 
lblOne.addTextSpacing(spacing: 4.5) 

extension UITextField{ 
    func addPlaceholderSpacing(spacing: CGFloat){ 
     let attributedString = NSMutableAttributedString(string: self.placeholder!) 
     attributedString.addAttribute(NSKernAttributeName, value: spacing, range: NSRange(location: 0, length: self.placeholder!.characters.count)) 
     self.attributedPlaceholder = attributedString 
    } 
} 
txtUserName.addPlaceholderSpacing(spacing: 4.5) 

extension UINavigationItem{ 
    func addSpacing(spacing: CGFloat){ 
     let attributedString = NSMutableAttributedString(string: self.title!) 
     attributedString.addAttribute(NSKernAttributeName, value: spacing, range: NSRange(location: 0, length: self.title!.characters.count)) 
     let label = UILabel() 
     label.textColor = UIColor.black 
     label.font = UIFont.systemFont(ofSize: 15, weight: UIFontWeightBold) 
     label.attributedText = attributedString 
     label.sizeToFit() 
     self.titleView = label 
    } 
} 
navigationItem.addSpacing(spacing: 2.5) 
関連する問題