保存按钮图像的状态 swift

Saving a button image's state swift

当用户按下按钮时,图像会变为打开状态。当用户离开 View Controller 时,我需要它记住按钮已设置为图像,下次他们转到此 VC。我试过 NSUser 默认值无济于事。有人可以帮忙吗?

在按钮操作中:

  buttonPressed = !buttonPressed

    let defaults = NSUserDefaults.standardUserDefaults()


    if buttonPressed == true {

        let followedObjectId = userToShowDetail?["name"] as? String

        isFollowing[followedObjectId!] = true

        sender.setImage(UIImage(named: "fave_on@2x.png"), forState: UIControlState.Normal)
        print("follow")

        let following = PFObject(className: "Followers")
        following["following"] = userToShowDetail?["name"] as? String
        following["follower"] = PFUser.currentUser()?.objectId
        favLabel.text = "Favourite Jammer"

        following.saveInBackground()
        defaults.setBool(true, forKey: "SwitchState")

    } else {

        if buttonPressed != true {
            let followedObjectId = userToShowDetail?["name"] as? String

            isFollowing[followedObjectId!] = false
            print("notFollow")
            sender.setImage(UIImage(named: "fave_off@2x.png"), forState: UIControlState.Normal)

            favLabel.text = "Add to favourites?"

            defaults.setBool(false, forKey: "SwitchState")

在视图中加载:

  // save switch state:
    let defaults = NSUserDefaults.standardUserDefaults()
    if (defaults.objectForKey("SwitchState") != nil) {
        buttonPressed = defaults.boolForKey("SwitchState")
    }

试试下面我的解决方案。每次单击按钮时,它都会更改状态的开和关。如果你离开视图控制器,它会保存状态。让我知道这是否对您有帮助。

import UIKit

class ViewController: UIViewController{

    // MARK: Properties

    @IBOutlet weak var imgTest: UIImageView!

    let defaults = NSUserDefaults.standardUserDefaults()
    var setImageStatus: String = "off" {
        willSet {
            if newValue == "on" {
                imgTest.image = UIImage(named: "imgOn.png")
            } else {
                imgTest.image = UIImage(named: "imgOff.png")
            }
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        if let imgStatus = defaults.stringForKey("imgStatus")
        {
            setImageStatus = imgStatus
        } else {
            setImageStatus = "off"
        }

    }

    @IBAction func btnSave(sender: UIButton) {

        let stat = setImageStatus == "on" ? "off" : "on"
        setImageStatus = stat
        defaults.setObject(stat, forKey: "imgStatus")

    }
}

您可以简单地在 AppDelegate

中存储类似这样的内容
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate{

    var myButtonSwitchState: Bool = false


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        //your code...
    }    

    //the rest of your code...

}

然后,在您的视图控制器中,您可以通过将 UIApplication.sharedApplication().delegate 转换为 AppDelegate

来获取您的应用委托
var appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

然后,您可以简单地在应用委托中获取和设置布尔值

func getSwitchState() -> Bool{
    return appDelegate.myButtonSwitchState
}

func setSwitchState(value: Bool){
    appDelegate.myButtonSwitchState = value
}

如果您想在用户退出应用程序(将其从 运行 应用程序中删除)后存储此状态,您可以使用 NSUserDefaults 并简单地使用它

func getSwitchState() -> Bool{
    return NSUserDefaults.standardUserDefaults().boolForKey("buttonStatus")
}

func setSwitchState(value: Bool){
    NSUserDefaults.standardUserDefaults().setObject(value, forKey: "buttonStatus")
    NSUserDefaults.standardUserDefaults().synchronize()
}