2015-12-02 5 views
5

मुझे पता चला है कि UILabel (here) में अक्षर अंतर कैसे सेट करें, लेकिन यह विधि UIButtons के लिए काम नहीं कर रही है। क्या कोई जानता है इसे कैसे करना है? 'NSConcreteAttributedString' (0x19e508660) to 'NSMutableAttributedString' (0x19e506a40).स्विफ्ट में UIButton के अक्षर अंतर को कैसे बदलें?

+0

कहाँ वास्तव में समस्या है? कृपया वह कोड पोस्ट करें जो आपके लिए काम नहीं कर रहा है। टूटी हुई कोड देखने के लिए –

+0

आपके लिए अपडेट किया गया। –

उत्तर

10
  1. NSAttributedString बनाने की तरह सवाल में आप अपने UIButton
  2. पर लिंक
  3. कॉल setAttributedTitle(_ ,forState:):

    यहाँ कोड मैं

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

    उपयोग कर रहा हूँ यह मुझे एक त्रुटि फेंकता है


इस (untested) का प्रयास करें:

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 से समाधान पाठ रंग सेटिंग का अनुपालन नहीं करता है। स्टोरीबोर्ड में भी स्पेसिंग पैरामीटर उपलब्ध कराने के लिए UIButton क्लास को ओवरराइड कर सकता है। यहाँ एक अद्यतन स्विफ्ट 3 समाधान आता है:

स्विफ्ट 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) 
संबंधित मुद्दे