У меня есть вопрос о сохранении последнего статуса кнопок для игры «Hung Person». Используя UserDefaults
, я смог сохранить практически весь статус пользователя, когда игра была закрыта (на экране 1 отображается статус игры пользователя во время игры), как вы можете видеть, пользователь выбрал 2 неправильные буквы, которые не были скрыты слова (M и N, которые выделены красным цветом и отключены), и пользователь правильно угадал буквы O, B, C (которые исчезли из алфавита и также отключены).

Когда пользователь закрывает приложение и когда оно открывается снова, я смог перезагрузить почти все предыдущие данные последнего воспроизведенного сеанса, за исключением состояния кнопок. Вы можете увидеть это на Screen2. Я использовал UserDefaults
, чтобы сохранить и загрузить игру. Я сохраняю статус игры каждый раз, когда пользователь нажимает на любую кнопку (пытаясь угадать символы скрытого слова), и загружаю данные обратно в viewDidLoad()
.

Игра сделана программно, я создал кнопки, используя что-то вроде следующего:
for row in 0..<5 {
for column in 0..<6 {
if counterLetter < 26 {
let letterButton = UIButton(type: .system)
letterButton.titleLabel?.font = UIFont.systemFont(ofSize: titleLabelFontSize)
letterButton.setTitle(englishAlphabet[counterLetter], for: .normal)
letterButton.isHidden = false
letterButton.isEnabled = true
letterButton.alpha = 1
letterButton.setTitleColor(.red, for: .disabled)
letterButton.addTarget(self, action: #selector(letterTapped), for: .touchUpInside)
letterButton.layer.borderWidth = 1
letterButton.layer.borderColor = UIColor.black.cgColor
// Button's frame creation
let frame = CGRect(x: column*widthButton, y: row*heightButton,
width: widthButton, height: heightButton)
letterButton.frame = frame
buttonsView.addSubview(letterButton)
letterButtons.append(letterButton)
counterLetter += 1
} else {
continue
}
}
}
Это в методе letterTapped
(внутри части #selector(letterTapped)
в предыдущем код), где я сохраняю прогресс пользователя при нажатии любой кнопки алфавита. Как я уже говорил, я вспоминаю последний статус игрока в viewDidLoad()
.
. Я также пытался сохранить статус кнопок в методе letterTapped
, но мне не удалось сохранить или перезагрузить статус кнопок, как у игрока.
Не могли бы вы дать мне, пожалуйста, руку, где я должен использовать userDefaults
, чтобы сохранить статус последней сессии алфавитных кнопок, пожалуйста? Так что, когда игроки снова откроют приложение, screen2 будет таким же, как screen1.
Если вы хотите, чтобы я поделился своим кодом, я могу сделать это с готовностью.
Заранее спасибо.
С уважением!