Home > Net >  Swift - Button text color won't change with setTitleColor
Swift - Button text color won't change with setTitleColor

Time:02-11

I can not seem to get the text in two of my buttons to change to white, unless I manually do it through the storyboard. Any ideas?

class AppUIButton: UIButton {

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        
        backgroundColor = Theme.tintColor
        layer.cornerRadius = frame.height / 2
        setTitleColor(UIColor.white, for: .normal)
    }
}


class AddTripViewController: UIViewController {
    
    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var tripTextField: UITextField!
    @IBOutlet weak var cencelButton: UIButton!
    @IBOutlet weak var saveButton: UIButton!
    
    var doneSaving: (() -> ())?

    override func viewDidLoad() {
        super.viewDidLoad()

        titleLabel.font = UIFont(name: Theme.mainFontName, size: 24)
        
        //I can force the text color to change with the bellow
        //cencelButton.setTitle("Cancel", for: .normal)
        //cencelButton.setTitleColor(UIColor.white, for: .normal)
        
        //saveButton.setTitle("Add", for: .normal)
        //saveButton.setTitleColor(UIColor.white, for: .normal)
       
    }
    
    @IBAction func cancel(_ sender: Any) {
        dismiss(animated: true)
    }
    
    @IBAction func save(_ sender: Any) {
        TripFunctions.createTrip(tripModel: TripModel(title: tripTextField.text!))
        if let doneSaving = doneSaving {
            doneSaving()
        }
        dismiss(animated: true)
    }
}

CodePudding user response:

This should work for you.

titleLabel.textColor = UIColor.white

CodePudding user response:

If you want to create a custom class for UIButton you can do something like this

import UIKit

@IBDesignable
class ThemeButton: UIButton {

     
    @IBInspectable var borderRadius:CGFloat = 10.0 {
        didSet {
            self.layer.cornerRadius = self.borderRadius
        }
    }
    
    @IBInspectable var fontSize:CGFloat = 14 {
        didSet {
            self.titleLabel?.font = UIFont.ThemeRegular(ofSize: fontSize)
        }
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setUI()
        //        self.isSelected = true
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setUI()
    }
    
    override func prepareForInterfaceBuilder() {
        setUI()
    }
    
    private func setUI() {
        DispatchQueue.main.async {
            self.clipsToBounds = true
            self.setTitleColor(.white, for: .normal)
            self.titleLabel?.font = UIFont.ThemeRegular(ofSize: self.fontSize)
            self.backgorundColor = .red
            self.layer.cornerRadius = self.borderRadius
        }
    }
}

And you can use it by giving your button class name to the UIButton

enter image description here

  • Related