UserDefault保存按钮状态 [英] UserDefault To Save Button State

查看:127
本文介绍了UserDefault保存按钮状态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过保存状态来完成我最喜欢的按钮,即使我退出了视图\ App。如果有人能告诉我怎么办
这将是很好的,我正在使用Xcode 8并使用Swift 3进行编码。

I'm trying to complete my favorite button by saving it state even when i quit the view \ App . it will be great if anyone could show me how can i do this, I'm using Xcode 8 and coding with Swift 3.

  //create a new button
    let Favoritebutton: UIButton = UIButton(type: UIButtonType.custom)
    //set image for button
    Favoritebutton.setImage(UIImage(named: "EmptyHeart.png"), for: .normal)
    Favoritebutton.setImage(UIImage(named: "FilledHeart.png"), for: .selected)
    //add function for button
    Favoritebutton.addTarget(self, action: #selector(self.button), for: .touchUpInside)
    //set frame
    Favoritebutton.frame = CGRect(x:0,y: 0,width: 35,height: 35)

    Favoritebutton.isSelected = UserDefaults.standard.bool(forKey: "isSaved")

    let barButton = UIBarButtonItem(customView: Favoritebutton)
    //assign button to navigationbar

    self.navigationItem.rightBarButtonItem = barButton

    let state = UserDefaults.standard.bool(forKey: "isSaved") ?? false

    }


@IBAction func button(sender: UIButton) {

    sender.isSelected = !sender.isSelected
    if let Favoritebutton = sender as? UIButton {
        Favoritebutton.isSelected = UserDefaults.standard.bool(forKey: "isSaved")
        if Favoritebutton.isSelected {
            // set selected
            Favoritebutton.isSelected = true



    // set badge Value to tabbar item.
    let tabItem = self.tabBarController?.tabBar.items![3]
    sel_val = tabItem?.badgeValue
    if(sel_val == nil){
        sel_val = "0"
    }
    let sel_num  = Int(sel_val!)
    tabItem!.badgeValue = String(format: "%d", sel_num! + 1) as String
    //Add Favorite
    let Fav: NSMutableArray = []
    Fav.add(barImage)
    Fav.add(barName)
    Fav.add(streetName)
    favorite.add(Fav)




        } else {
            // set deselected
            Favoritebutton.isSelected = false
            //Badge Value Count.
            let tabItem = self.tabBarController?.tabBar.items![3]
            sel_val = tabItem?.badgeValue
            if(sel_val == nil){
                sel_val = "0"
            }
            let sel_num  = Int(sel_val!)
            tabItem!.badgeValue = String(format: "%d", sel_num! - 1) as String
            //Remove Favorite
            let Fav: NSMutableArray = []
            Fav.add(barImage)
            Fav.add(barName)
            Fav.add(streetName)
            favorite.remove(Fav)


        }
    }


推荐答案

您可以将按钮中的代码减少到

@IBAction func button(sender: UIButton) {

    sender.isSelected = !sender.isSelected
    UserDefaults.standard.set(sender.isSelected, forKey: "isSaved")
}

要设置状态,你必须将其读回来

To set the state you have to read it back

let Favoritebutton = UIButton(type: UIButtonType.custom)
//set image for button
Favoritebutton.setImage(UIImage(named: "EmptyHeart.png"), for: .normal)
Favoritebutton.setImage(UIImage(named: "FilledHeart.png"), for: .selected)
Favoritebutton.isSelected = UserDefaults.standard.bool(forKey: "isSaved")
...

编辑:

我不知道你的代码是做什么的,但是有很多冗余代码。 IBAction 可以减少到(未经测试,当然)

I have no clue what your code does but there is a lot of redundant code. The IBAction can be reduced to (untested, of course)

@IBAction func button(sender: UIButton) {

    let newValue = !sender.isSelected
    sender.isSelected = newValue
    UserDefaults.standard.set(newValue, forKey: "isSaved")

    let tabItem = self.tabBarController?.tabBar.items![3]
    sel_val = tabItem?.badgeValue
    if(sel_val == nil){
        sel_val = "0"
    }
    let sel_num  = Int(sel_val!)

    let fav: NSMutableArray = []
    fav.add(barImage)
    fav.add(barName)
    fav.add(streetName)
    if sender.isSelected {
        tabItem!.badgeValue = String(format: "%d", sel_num! + 1)
        favorite.add(fav)
    } else {
        tabItem!.badgeValue = String(format: "%d", sel_num! - 1)
        favorite.remove(fav)
    }
}

请用起始小写字母命名变量。

and please name variables with a starting lowercase letter.

这篇关于UserDefault保存按钮状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆