diff --git a/LearnEnglish/LearnEnglish/Models/Quiz.swift b/LearnEnglish/LearnEnglish/Models/Quiz.swift index 9035a99..33b3b0c 100644 --- a/LearnEnglish/LearnEnglish/Models/Quiz.swift +++ b/LearnEnglish/LearnEnglish/Models/Quiz.swift @@ -51,6 +51,27 @@ enum QuizGenerator { } } + static func recase(_ questions: [QuizQuestion], toUpper: Bool) -> [QuizQuestion] { + questions.map { q in + let word = q.word + let text = toUpper ? word.word.uppercased() : word.word.lowercased() + let recased = Word(categoryId: word.categoryId, word: text, phonetic: word.phonetic, + meaning: word.meaning, example: word.example, exampleMeaning: word.exampleMeaning) + let blanked = q.blankedWord.map { ch -> String in + ch == "_" ? "_" : ch.uppercased() + }.joined() + let blankedWord = toUpper ? blanked.uppercased() : blanked.lowercased() + return QuizQuestion( + word: recased, + prompt: q.prompt, + options: q.options, + answer: text, + blankedWord: blankedWord, + blankPositions: q.blankPositions + ) + } + } + private static func promptText(_ word: Word, _ mode: QuizMode) -> String { switch mode { case .enToZh: return word.word diff --git a/LearnEnglish/LearnEnglish/Views/QuizViewController.swift b/LearnEnglish/LearnEnglish/Views/QuizViewController.swift index 03fa367..026d57f 100644 --- a/LearnEnglish/LearnEnglish/Views/QuizViewController.swift +++ b/LearnEnglish/LearnEnglish/Views/QuizViewController.swift @@ -425,15 +425,8 @@ final class QuizViewController: UIViewController { isUppercase.toggle() UserDefaults.standard.set(isUppercase, forKey: "spelling_uppercase") updateCaseButton() - selectedOption = nil - let words = config.words.map { word in - let text = isUppercase ? word.word.uppercased() : word.word.lowercased() - return Word(categoryId: word.categoryId, word: text, phonetic: word.phonetic, - meaning: word.meaning, example: word.example, exampleMeaning: word.exampleMeaning) - } - questions = QuizGenerator.makeQuestions(mode: config.mode, words: words) - showQuestion() - spellingView.activate() + questions = QuizGenerator.recase(questions, toUpper: isUppercase) + spellingView.updateCase(toUpper: isUppercase) } private func updateCaseButton() { diff --git a/LearnEnglish/LearnEnglish/Views/SpellingInputView.swift b/LearnEnglish/LearnEnglish/Views/SpellingInputView.swift index e3dd901..6b50895 100644 --- a/LearnEnglish/LearnEnglish/Views/SpellingInputView.swift +++ b/LearnEnglish/LearnEnglish/Views/SpellingInputView.swift @@ -133,6 +133,20 @@ final class SpellingInputView: UIView, UITextFieldDelegate { hiddenField.inputAccessoryView = nil } + func updateCase(toUpper: Bool) { + chars = chars.map { + guard $0 != "_" else { return $0 } + return toUpper ? $0.uppercased() : $0.lowercased() + } + filledBlanks = filledBlanks.map { + $0.isEmpty ? $0 : (toUpper ? $0.uppercased() : $0.lowercased()) + } + for (index, box) in boxViews.enumerated() where chars[index] != "_" { + (box.viewWithTag(100) as? UILabel)?.text = chars[index] + } + refreshBoxes() + } + func showResultState(correct: Bool) { let color = correct ? Theme.Color.correct : Theme.Color.wrong for position in blankPositions {