2017-02-09 1 views
0

Я использую Xcode 8 и Swift 3 и пытаюсь создать кнопку, которая меняет цвета, когда я нажимаю на нее.Изображение UIButton в Swift не меняет цвета даже после создания функции

кнопка черная, но при включении она должна стать синей. Кнопка представляет собой изображение копилки.

Я пошел вперед и добавил изображение черной свиньи и голубой свиньи с именами money_off и money_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) 
     } 
    } 
} 
+0

ли вы проверили с точки останова? –

ответ

1

Попробуйте this-

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 
    } 
} 
+0

большое спасибо! это отлично сработало – pynewbee

+0

Хорошо ... тогда примите это ... :) –

0

Лучше не полагаться на возвращаемое значение некоторого #imageLiteral, но вместо того, чтобы сохранить состояние, как 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 
    } 
} 
0

Ниже код работа для меня:

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

I угадайте проблему - это ваше соединение между раскадровки и вид контроллера.

Я пытаюсь добавить кнопку программно, и она работает.

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) 
     } 
    } 
} 
Смежные вопросы