Сохранение фонового изображения UIButton после возврата к контроллеру представления в Xcode

#ios #swift

#iOS #swift

Вопрос:

Я запрограммировал свою кнопку таким образом, что всякий раз, когда пользователь нажимает на кнопку, он присваивает фоновое изображение этой конкретной кнопке, а фоновое изображение на всех других кнопках становится нулевым. Теперь я пытаюсь понять, как я могу сохранить фоновое изображение этого конкретного UIButton, на которое пользователь нажал перед выходом из UICoontroller, используя пользовательские настройки по умолчанию. Таким образом, когда пользователь возвращается, он должен отображать фоновое изображение на этом конкретном UIButton. Это код для того же:-

 @IBAction func Button1(_ sender: Any) {
    
    button1.setBackgroundImage(image, for: .normal)
    
    button2.setBackgroundImage(nil, for: .normal)
}

@IBAction func Button2(_ sender: Any) {
    
    button2.setBackgroundImage(image, for: .normal)
    
    button1.setBackgroundImage(nil, for: .normal)
}
  

Я был бы признателен за вашу помощь! Спасибо!

Комментарии:

1. что плохого в том, чтобы просто сохранить имя изображения в userdefaults ?

2. @zeytin Спасибо за ответ! На самом деле я сохраняю фоновое изображение, используя следующую команду, но приложение разбилось: — UserDefaults.standard.set(button1.currentBackgroundImage, forKey: «BackgroundImage)

3. Я думаю, у вас уже есть изображение в ваших активах, верно?

4. @zeytin Да! Я делаю.

5. @zeytin Не могли бы вы сообщить мне, как я могу это сохранить! Спасибо!

Ответ №1:

Ваш вопрос в основном заключается в том, как сохранить состояние этого контроллера представления и UserDefaults действительно может дать вам то, что вы хотите.

Ваше состояние состоит из 2 частей: одна — какая кнопка имеет фон изображения, две — имя изображения (если оно не является постоянным).

При загрузке контроллера представления вы захотите воссоздать свое состояние из UserDefaults :

  1. Получить имя изображения
  2. Узнайте, какая кнопка имеет фон изображения
  3. Установите фон для этой кнопки <- для этого вам нужно какое-то детерминированное отображение, например, вы можете использовать tag поле UIButton .

Итак, фрагменты кода:

 // assign tag values (can be done from Storyboard UI as well)
button1.tag = 1
button2.tag = 2

// saving particular button tag to UserDefaults on tap:
@IBAction func Button1(_ sender: UIButton) {
    UserDefaults.standard.set(sender.tag, forKey: "selected_button_tag")
}

// get "selected_button_tag" on viewDidLoad or smthn:
let tag = UserDefaults.standard.integer(forKey: "selected_button_tag")
if tag > 0 {
   // ... find the button with this tag value and set background. 
   // E.g. you can have a dictionary or some other collection with your UIButton objects for easier access.
}
  

Ответ №2:

Насколько я понимаю, вам просто нужно сохранить имя изображения и использовать его для фона кнопки, чтобы вы могли использовать такую вещь

 let defaults = UserDefaults.standard
defaults.set("niceImageFileName", forKey: "zeytin")

let savedName = defaults.string(forKey: "zeytin")

yourButton.setImage(UIImage(named: savedName), for: .normal)
  

Комментарии:

1. @Pressing_Keys_24_7 это полезно для вас?

2. На самом деле я хотел сохранить фоновое изображение UIButton, установленное пользователем, прежде чем он покинет контроллер представления, а не имя UIImage! Но, в любом случае, я ценю вашу помощь и проголосовал за!