【发布时间】:2015-02-16 17:00:25
【问题描述】:
我是一名新开发人员,我正在用 Swift 制作一个待办事项列表应用程序。我能够弄清楚如何在单击时更改UIButton(复选框)的状态。目前,我正试图弄清楚如何在退出应用程序或切换视图并返回时保存该状态。我能够使用NSUserDefaults 成功保存文本(待办事项列表任务),并且还在我的按钮上进行了实验,但不知道如何让它工作。
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var myButton: Qbutton!
override func viewDidLoad() {
super.viewDidLoad()
var isChecked = NSUserDefaults.standardUserDefaults().boolForKey("isBtnChecked") // here we obtain the last state of the button
myButton.isChecked = isChecked
self.view.addSubview(myButton)
我在QButton 的子类中有UIButton。
class Qbutton: UIButton {
var isSelected: Bool = defaults.boolForKey("isButtonChecked")
// Images
let selectedImage = UIImage(named: "Selected")
let unselectedImage = UIImage(named: "Unselected")
//Bool Property
var isChecked:Bool = false{
didSet{
if isChecked == true{
self.setImage(selectedImage, forState: UIControlState.Normal)
}else{
self.setImage(unselectedImage, forState: UIControlState.Normal)
}
defaults.setObject(isChecked, forKey: "isButtonChecked")
}
}
override init(frame: CGRect){
super.init(frame:frame)
self.layer.masksToBounds = true
self.setImage(unselectedImage, forState: UIControlState.Normal)
self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
self.isChecked = false
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func buttonClicked(sender: UIButton) {
if(sender == self){
if isChecked == true{
isChecked = false
}else{
isChecked = true
}
}
}
}
【问题讨论】:
-
您的代码很好,您遇到了什么问题?通过
var isSelected: Bool = defaults.boolForKey("SelectedState")访问您的默认设置 -
如果 isChecked == true 是多余的。 if isChecked {...}
-
另外,如果你想切换一个布尔值(func checkBox),你可以简单地这样做:isChecked = !isChecked
-
我继续重构我的一些代码。我仍然遇到问题,因为当我关闭应用程序并尝试运行它时,我的按钮状态不会保存。
标签: ios xcode swift uibutton nsuserdefaults