diff --git a/LearnEnglish/LearnEnglish/Models/Quiz.swift b/LearnEnglish/LearnEnglish/Models/Quiz.swift index b265ac8..0f9a530 100644 --- a/LearnEnglish/LearnEnglish/Models/Quiz.swift +++ b/LearnEnglish/LearnEnglish/Models/Quiz.swift @@ -14,6 +14,13 @@ struct QuizSetupRequest: Hashable { struct QuizConfig: Hashable { let mode: QuizMode let words: [Word] + let isStudyMode: Bool + + init(mode: QuizMode, words: [Word], isStudyMode: Bool = false) { + self.mode = mode + self.words = words + self.isStudyMode = isStudyMode + } } struct QuizQuestion: Identifiable { diff --git a/LearnEnglish/LearnEnglish/Views/QuizViewController.swift b/LearnEnglish/LearnEnglish/Views/QuizViewController.swift index 38efc93..c21ac4b 100644 --- a/LearnEnglish/LearnEnglish/Views/QuizViewController.swift +++ b/LearnEnglish/LearnEnglish/Views/QuizViewController.swift @@ -347,9 +347,22 @@ final class QuizViewController: UIViewController { resultLabel.textColor = correct ? Theme.Color.correct : Theme.Color.wrong resultLabel.isHidden = false - nextButton.configuration?.title = currentIndex + 1 < questions.count ? "下一题" : "查看成绩" - nextButton.isEnabled = true - nextButton.isHidden = false + if config.isStudyMode { + if correct { + nextButton.isHidden = true + DispatchQueue.main.asyncAfter(deadline: .now() + 0.8) { [weak self] in + self?.restart() + } + } else { + nextButton.configuration?.title = "继续学习" + nextButton.isEnabled = true + nextButton.isHidden = false + } + } else { + nextButton.configuration?.title = currentIndex + 1 < questions.count ? "下一题" : "查看成绩" + nextButton.isEnabled = true + nextButton.isHidden = false + } } @objc private func speakCurrentWord() { @@ -358,7 +371,9 @@ final class QuizViewController: UIViewController { } private func primaryButtonTapped() { - if config.mode == .spelling, selectedOption == nil { + if config.isStudyMode, selectedOption != nil { + restart() + } else if config.mode == .spelling, selectedOption == nil { guard let question = current, spellingView.isComplete else { return } submitSpelling(spellingView.typedWord(), for: question) } else if config.mode == .dictation, selectedOption == nil { diff --git a/LearnEnglish/LearnEnglish/Views/WordDetailViewController.swift b/LearnEnglish/LearnEnglish/Views/WordDetailViewController.swift index 7d67f52..ce7343a 100644 --- a/LearnEnglish/LearnEnglish/Views/WordDetailViewController.swift +++ b/LearnEnglish/LearnEnglish/Views/WordDetailViewController.swift @@ -31,6 +31,7 @@ final class WordDetailViewController: UIViewController { view.backgroundColor = .systemBackground title = categoryName navigationItem.largeTitleDisplayMode = .never + navigationItem.rightBarButtonItem = UIBarButtonItem(title: "学习", style: .plain, target: self, action: #selector(startSpelling)) buildLayout() updateSpeakState() speechObserver = NotificationCenter.default.addObserver( @@ -186,6 +187,12 @@ final class WordDetailViewController: UIViewController { return card } + @objc private func startSpelling() { + Haptics.selection() + let config = QuizConfig(mode: .spelling, words: [word]) + navigationController?.pushViewController(QuizViewController(config: config), animated: true) + } + private func searchMeaning() { Haptics.selection() let text = "\(word.meaning) 是什么意思"