'Swift 5 UIButton title didn't change
I just learned Swift and developed an iOS project.
But the button title doesn't change when I click it. How can I change the title?
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var helloButton: UIButton!
@IBAction func showAlert(_ sender: Any) {
//var alert = UIAlertController(title: "Hello!", message: "Hello, world!",preferredStyle: UIAlertControllerStyle.Alert)
let alert = UIAlertController(title: "Hello", message: "Hello, world", preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "close", style: UIAlertAction.Style.default, handler: nil))
self.present(alert,animated:true,completion:nil)
// ❌ it didn't work
self.helloButton.setTitle("Clicked",for:.normal)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
Solution 1:[1]
I found the reason!
It was because the UIButton title being ?Attributed? or ?Plain?.
?Different attribute has different API to change the title
If it is ?Attributed?: We should change the UIButton title by:
//
// ViewController.swift
// HelloCocoa
//
// Created by LearnChild on 2021/4/14.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var helloButton: UIButton!
@IBAction func showAlert(_ sender: Any) {
// var alert = UIAlertController(title: "Hello!", message: "Hello, world!",preferredStyle: UIAlertControllerStyle.Alert)
let alert = UIAlertController(title: "Hello", message: "Hello, world", preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "close", style: UIAlertAction.Style.default, handler: nil))
self.present(alert,animated:true,completion:nil)
// if UIButton title is Plain
// self.helloButton.setTitle("Clicked",for:.normal)
// if UIButton title is Attributed??
let myNormalAttributedTitle = NSAttributedString(string: "Click Here",
attributes: [NSAttributedString.Key.foregroundColor : UIColor.blue])
self.helloButton.setAttributedTitle(myNormalAttributedTitle,for:.normal)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
And if it's ?Plain?:
//
// ViewController.swift
// HelloCocoa
//
// Created by LearnChild on 2021/4/14.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var helloButton: UIButton!
@IBAction func showAlert(_ sender: Any) {
// var alert = UIAlertController(title: "Hello!", message: "Hello, world!",preferredStyle: UIAlertControllerStyle.Alert)
let alert = UIAlertController(title: "Hello", message: "Hello, world", preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "close", style: UIAlertAction.Style.default, handler: nil))
self.present(alert,animated:true,completion:nil)
// if UIButton title is Plain??
self.helloButton.setTitle("Clicked",for:.normal)
// if UIButton title is Attributed?
// let myNormalAttributedTitle = NSAttributedString(string: "Click Here",
// attributes: [NSAttributedString.Key.foregroundColor : UIColor.blue])
// self.helloButton.setAttributedTitle(myNormalAttributedTitle,for:.normal)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
Thanks to everyone who helped!
Solution 2:[2]
You haven't called for the function showAlert() in the code. You need to call the function as soon as the user clicks on that required button, for which you'll need to use a function which is called as soon as the click action happens and your required functionality is invoked and processed.
Solution 3:[3]
The above code just works fine, and the title changes. You can also update the title inside the alert handler as below.
@IBAction func helloButtonTapped(_ sender: Any) {
let alert = UIAlertController(title: "Hello", message: "Hello, world", preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "close", style: .default, handler: { (_) in
self.helloButton.setTitle("Clicked",for:.normal)
}))
self.present(alert,animated:true,completion:nil)}
Solution 4:[4]
What i found is that the in Target > DeploymentInfo > iPhone = change iOS version to latest one currently i am using 15.0, changed from 12.0. it was the reason why my button's title was not getting bold after install in device.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | shadow of arman |
Solution 2 | Hridesh Taldar |
Solution 3 | Deepa Bhat |
Solution 4 | maKBuk |