繁体   English   中英

即使在创建函数后,Swift中的UIButton图像也不会更改颜色

[英]UIButton image in Swift does not change colors even after a function is created

我正在使用Xcode 8和Swift 3,并尝试创建一个单击按钮时会更改颜色的按钮。

该按钮为黑色,但是当我单击时应变为蓝色。 该按钮是存钱罐的图像。

我继续添加了黑色猪和蓝色猪的图像,分别命名为money_offmoney_on

我现在正在编写代码,以使单击后的黑色图像变为蓝色。 代码本身未显示任何错误,但模拟未成功。 单击黑色的存钱罐没有任何作用。

有人知道可能会发生什么吗?

import UIKit

class SecondViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var label: UILabel!
     let step: Float = 1

    @IBOutlet weak var moneybutton: UIButton!

    @IBOutlet var itemTextField: UITextField!

    @IBAction func moneyClicked(_ sender: UIButton) {
        if sender.currentImage === #imageLiteral(resourceName: "money_off"){
            sender.setImage(#imageLiteral(resourceName: "money_on"), for: .normal)}
        else {
            sender.setImage(#imageLiteral(resourceName: "money_off"), for: .normal)
        }
    }
}

尝试这个-

class SecondViewController: UIViewController, UITextFieldDelegate {
  @IBOutlet weak var moneybutton: UIButton!

  func viewDidLoad() {
    self.moneybutton.setImage(UIImage(named:"money_on"), for: .selected)
    self.moneybutton.setImage(UIImage(named:"money_off"), for: .normal)
  }

  @IBAction func moneyClicked(_ sender: UIButton) {
   self.moneybutton.isSelected = !self.moneybutton.isSelected
  }
}

您最好不要依赖某些#imageLiteral的返回值,而要保持状态,如moneyOff的示例代码中的moneyOff

(对不起,没有可用的Xcode,因此代码可能包含一些语法错误,但是您会明白的):

class SecondViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var label: UILabel!
    let step: Float = 1
    var moneyOff = true

    @IBOutlet weak var moneybutton: UIButton!

    @IBOutlet var itemTextField: UITextField!


    @IBAction func moneyClicked(_ sender: UIButton) {
        if moneyOff {
            sender.setImage(#imageLiteral(resourceName: "money_on"), for: .normal)}
        else {
            sender.setImage(#imageLiteral(resourceName: "money_off"), for: .normal)
        }
        moneyOff = !moneyOff // toggle state
    }
}

下面的代码为我工作:

class ViewController: UIViewController {

     @IBOutlet weak var moneybutton: UIButton!
     func viewDidLoad() 
     {
       moneybutton.setImage(UIImage(named:"money_on"), for: .selected)
       moneybutton.setImage(UIImage(named:"money_off"), for: .normal)
     }

     @IBAction func moneyClicked(_ sender: UIButton)
     {
       if self.btn.isSelected
       {
         self.moneybutton.isSelected = false
       }
       else{
         self.moneybutton.isSelected = true
     }
 }

我猜问题是故事板视图控制器之间的连接。

我尝试以编程方式添加按钮,并且可以正常工作。

import UIKit
import AVFoundation

class ViewController: UIViewController {

    lazy var btn: UIButton = {
        let btn = UIButton()
        btn.translatesAutoresizingMaskIntoConstraints = false
        btn.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleClicked)))
        btn.isUserInteractionEnabled = true
        btn.setImage(UIImage(named: "money_off"), for: .normal)

        return btn
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .green

        view.addSubview(btn)

        btn.topAnchor.constraint(equalTo: view.topAnchor, constant: 100).isActive = true
        btn.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 50).isActive = true
        btn.widthAnchor.constraint(equalToConstant: 50).isActive = true
        btn.heightAnchor.constraint(equalToConstant: 10).isActive = true

    }

    func handleClicked() {
        if btn.currentImage == UIImage(named: "money_off")  {
            btn.setImage(UIImage(named: "money_on"), for: .normal)
        } else {
            btn.setImage(UIImage(named: "money_off"), for: .normal)
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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