2016-12-04 110 views
1

我開始創建自己的項目中最喜歡的button,我需要一些幫助......保存按鈕狀態

我創建了一個button和已編程它來打開imagetapped就在這裏:

override func viewDidLoad() { 
     super.viewDidLoad() 

     //create a new button 
     let Favoritebutton: UIButton = UIButton(type: UIButtonType.Custom) 
     //set image for button 
     Favoritebutton.setImage(UIImage(named: "EmptyHeart.png"), forState: UIControlState.Normal) 
     Favoritebutton.setImage(UIImage(named: "FilledHeart.png"), forState: UIControlState.Selected) 
     //add function for button 
     Favoritebutton.addTarget(self, action: #selector(self.button(_:)), forControlEvents: .TouchUpInside) 
     //set frame 
     Favoritebutton.frame = CGRectMake(90, 90, 35, 35) 

     let barButton = UIBarButtonItem(customView: Favoritebutton) 
     //assign button to navigationbar 
     self.navigationItem.rightBarButtonItem = barButton 

    } 


    @IBAction func button(sender: UIButton) { 
     sender.selected = !sender.selected; 
    } 

它的工作完美,但現在如果我退出應用程序button不保存狀態,如果它的selected或沒有。我聽說你可以NSUserDefault實現這一點,但我不知道如何實現這個,所以我很想得到一些幫助吧:)

我使用雨燕2.3和Xcode中8

謝謝。

+1

您的問題不是特定於iPhone或Xcode。請不要添加不相關的標籤。您應該閱讀這些標籤的描述,以瞭解何時正確使用它們。 – rmaddy

回答

2

這是相當簡單。在UserDefaults中,你可以存儲布爾值而沒有任何問題。

在viewDidLoad中,您可以像這樣檢查鍵值。

let defaults = UserDefaults.standard 

let buttonIsSelected = defaults.bool(forKey: "keyForIsButtonSelected") // If no value exists for this key then false is returned 

button.selected = buttonIsSelected 

在你的按鈕功能裏記得保存你的狀態。

sender.selected = !sender.selected 

let defaults = UserDefaults.standard 

defaults.set(sender.selected, forKey: "keyForIsButtonSelected") 

defaults.synchronize() // Save your defaults, can also move this part of code to applicationWillTerminate 

對於Swift 2.3使用這個。

let defaults = NSUserDefaults.standardUserDefaults() 

let buttonIsSelected = defaults.boolForKey("keyForIsButtonSelected") // If no value exists for this key then false is returned 

button.selected = buttonIsSelected 

內部按鈕的功能。

sender.selected = !sender.selected 

let defaults = NSUserDefaults.standardUserDefaults() 

defaults.setBool(sender.selected, forKey: "keyForIsButtonSelected") 

defaults.synchronize() // Save your defaults, can also move this part of code to applicationWillTerminate 
+1

不要不必要地調用'synchronize'。 – rmaddy

+0

可以在applicationWillTerminate上調用,但如果用戶在更改按鈕默認值後不退出應用程序(並且沒有代碼同步),則不會更新(保存)。 – Adamsor

+0

我得到這個錯誤:'使用未解析的標識符'UserDefaults''我使用Swift 2.3 @Adamsor –

1

爲SWIFT 3這將是未來:

//save value 
UserDefaults.standard.set(selected, forKey: "lButtonSelected") 
//then on next launch restore it 
let selected = UserDefaults.standard.value(forKey: "lButtonSelected") 
1

要保存NSUserDefaults值:

UserDefaults.standard.set(selected, forKey: "buttonStatus") 
UserDefaults.standard.synchronize() 

,並從NSUserDefaults檢索值:

let buttonStatus = UserDefaults.standard.value(forKey: "buttonStatus") 
+1

不要不必要地調用'synchronize'。 – rmaddy

+0

@rmaddy真的,他可以在應用程序進入後臺時調用同步 –

+0

這是任何人都應該調用「同步」的唯一時間。 – rmaddy