我是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
}
答案 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
}
}
}