2016-12-04 2 views
1

Я начинаю создавать любимые button для моего проекта, и мне нужна помощь ...Сохранить Кнопка Статус

Я создал button и уже запрограммировали для переключения image когда tapped здесь:

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, но я не знаю, как осуществить это так, я хотел бы получить некоторую помощь с этим :)

Я использую Swift 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

для быстрой 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 true, он может вызвать синхронизацию, когда приложение входит в фоновый режим –

+0

Это единственный раз, когда кто-то должен называть 'synchronize'. – rmaddy

Смежные вопросы