How to set the title text color of UIButton?
IosSwiftUibuttonIos Problem Overview
I tried changing the colors of the text for a button, but it's still staying white.
isbeauty = UIButton()
isbeauty.setTitle("Buy", forState: UIControlState.Normal)
isbeauty.titleLabel?.textColor = UIColorFromRGB("F21B3F")
isbeauty.titleLabel!.font = UIFont(name: "AppleSDGothicNeo-Thin" , size: 25)
isbeauty.backgroundColor = UIColor.clearColor()
isbeauty.layer.cornerRadius = 5
isbeauty.layer.borderWidth = 1
isbeauty.layer.borderColor = UIColorFromRGB("F21B3F").CGColor
isbeauty.frame = CGRectMake(300, 134, 55, 26)
isbeauty.addTarget(self,action: "first:", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(isbeauty)
I also tried changing it the red, black, blue, but nothing is happening.
Ios Solutions
Solution 1 - Ios
You have to use func setTitleColor(_ color: UIColor?, for state: UIControl.State)
the same way you set the actual title text. Docs
isbeauty.setTitleColor(UIColorFromRGB("F21B3F"), for: .normal)
Solution 2 - Ios
Swift UI solution
Button(action: {}) {
Text("Button")
}.foregroundColor(Color(red: 1.0, green: 0.0, blue: 0.0))
Swift 3, Swift 4, Swift 5
to improve comments. This should work:
button.setTitleColor(.red, for: .normal)
Solution 3 - Ios
Example in setting button title color
btnDone.setTitleColor(.black, for: .normal)
Solution 4 - Ios
This is swift 5 compatible answer. If you want to use one of the built-in colours then you can simply use
button.setTitleColor(.red, for: .normal)
If you want some custom colours, then create an extension for a UIColor as below first.
import UIKit
extension UIColor {
static var themeMoreButton = UIColor.init(red: 53/255, green: 150/255, blue: 36/255, alpha: 1)
}
Then use it for your button as below.
button.setTitleColor(UIColor.themeMoreButton, for: .normal)
Tip: You can use this method to store custom colours from rgba colour code and reuse it throughout your application.
Solution 5 - Ios
> func setTitleColor(_ color: UIColor?, > for state: UIControl.State)
Parameters:
> color:
The color of the title to use for the specified state.
>
> state:
The state that uses the specified color. The possible values are described in UIControl.State.
Sample:
let MyButton = UIButton()
MyButton.setTitle("Click Me..!", for: .normal)
MyButton.setTitleColor(.green, for: .normal)
Solution 6 - Ios
referring to radio buttons ,you can also do it with Segmented Control as following:
step 1: drag a segmented control to your view in the attribute inspector change the title of the two segments ,for example "Male" and "Female"
step 2: create an outlet & an action for it in the code
step 3: create a variable for future use to contain choice's data
in the code do as following:
@IBOutlet weak var genderSeg: UISegmentedControl!
var genderPick : String = ""
@IBAction func segAction(_ sender: Any) {
if genderSeg.selectedSegmentIndex == 0 {
genderPick = "Male"
print(genderPick)
} else if genderSeg.selectedSegmentIndex == 1 {
genderPick = "Female"
print(genderPick)
}
}
Solution 7 - Ios
set title color
btnGere.setTitleColor(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1), for: .normal)
Solution 8 - Ios
You can set UIButton title color with hex code
btn.setTitleColor(UIColor(hexString: "#95469F"), for: .normal)
Solution 9 - Ios
if you are using a button without NSAttribute then you can simply set the title and color of button by using
yourButtonName.setTitle("Your Title", for: .normal)
enterCustomAmount.setTitleColor(.gray, for: .normal)
but if you give NSAttribute in your button property then you first need to set the attribute for the button
var myAttribute = [ NSAttributedString.Key.foregroundColor: UIColor.init(hexString: "#FFAEA9")]
or for more then one property you can use comma separator like
var myAttribute = [ NSAttributedString.Key.foregroundColor: UIColor.init(hexString: "#FFAEA9"), NSAttributedString.Key.font: UIFont(name: "Dubai-Medium", size: 16) ]
and assign it to your UIButton like this
let myString = "Your title"
let text = NSAttributedString(string: myString, attributes: myAttribute)
enterCustomAmount.setAttributedTitle(text, for: .normal)