简体   繁体   中英

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.4 在此处输入图像描述

在此处输入图像描述 在此处输入图像描述 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()
    }
}

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.

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

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!

在此处输入图像描述 在此处输入图像描述 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. 在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM