Swift 3 - 如果基于按钮状态的else语句

时间:2017-02-08 02:42:12

标签: ios swift

我是Swift的新手并且正在开发我的第一个项目(我对Javascript和Web开发有一些经验)。我遇到了麻烦(尝试不同的解决方案需要4个小时)。

我有一个应用,当推送UIButton时,它会将值记录到FireBase(ON)。当它再次被按下时,它会记录(OFF)到数据库。

当我按下按钮改变view.backgroundColor并将if if与其工作的颜色联系起来时。

但我不能为我的生活找出如何根据按钮的状态构建我的if else。我现在最终试图改变按钮本身的颜色,并将if if与之结合。我所知道的是一种非常混乱的不正当方式。

import UIKit
import Firebase
import FirebaseDatabase

class ViewController: UIViewController {
    @IBAction func OnOffButton(_ sender: UITapGestureRecognizer){
        if button.backgroundColor == UIColor.white {
        OnOff(state:"ON")
            OnOffButton.backgroundColor = UIColor.blue
        } else{
            OnOff(state:"OFF")
            OnOffButton.backgroundColor = UIColor.white
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        OnOff(state: "Off")
        OnOffButton.backgroundColor = UIColor.white
    }

3 个答案:

答案 0 :(得分:2)

UIButton继承自UIControl,其isSelected属性。用它来跟踪状态。通常,您会使用button.isSelected == true来对应您的开启状态,并且false是您的关闭状态。

要切换状态,您可以使用button.isSelected = !button.isSelected

对于您的具体示例:

// User pressed the button, so toggle the state:
button.isSelected = !button.isSelected

// Now do something with the new state
if button.isSelected {
    // button is on, so ...
} else {
    // button is off, so...
}

答案 1 :(得分:0)

Par的解决方案应该有效。但是,我建议采用不同的方法。

通常,在视图对象中存储状态并不是一个好的设计。它很脆弱,并且不遵循MVC设计模式,其中视图对象显示和收集状态信息,而不是存储它。

相反,我会在视图控制器中创建一个实例变量buttonIsSelected。在点击按钮时切换,并让它更改按钮所选属性的状态,按钮的颜色,并将新状态记录到FireBase。

如果在视图控制器中存储更复杂的状态,则将其分离为模型对象是值得的。它可以像保存不同状态值的结构一样简单。这样,您可以在控制器(视图控制器)和模型之间实现明确的分离。

答案 2 :(得分:0)

这是Duncan C建议使用buttonIsSelected变量存储按钮状态的快速而肮脏的实现:

import UIKit

class ViewController: UIViewController {

  var buttonIsSelected = false
  @IBOutlet weak var onOffButton: UIButton!

  override func viewDidLoad() {
    super.viewDidLoad()
    updateOnOffButton()
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }

  @IBAction func onOffButtonTapped(_ sender: Any) {
    buttonIsSelected = !buttonIsSelected
    updateOnOffButton()
  }

  func updateOnOffButton() {
    if buttonIsSelected {
      onOffButton.backgroundColor = UIColor.blue
    }
    else {
      onOffButton.backgroundColor = UIColor.white
    }
  }

}