'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?

Simulator: iPhone 11 iOS14.4enter image description here

enter image description here enter image description here This is the code:

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.
    }


}

enter image description here

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]

enter image description hereenter image description hereWhat 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.enter image description here

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