UserDefault 保存按钮状态

UserDefault To Save Button State(UserDefault 保存按钮状态)
本文介绍了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)


        }
    }

推荐答案

可以将button中的代码缩减为

@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 保存按钮状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Why local notification is not firing for UNCalendarNotificationTrigger(为什么没有为UNCalendarNotificationTrigger触发本地通知)
iOS VoiceOver functionality changes with Bundle Identifier(IOS画外音功能随捆绑包标识符而变化)
tabbar middle tab out of tabbar corner(选项卡栏中间的选项卡角外)
Pushing UIViewController above UITabBar(将UIView控制器推送到UITabBar上方)
Dropbox Files.download does not start when number of files in folder is gt; 1000(当文件夹中的文件数为1000时,Dropbox Files.Download不会启动)
How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)