From def92715ac8a38ec12fd5c5409bd952a53b32ca3 Mon Sep 17 00:00:00 2001 From: fish Date: Sat, 18 Jul 2026 23:58:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=A6=E6=83=85=E9=A1=B5=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=85=A5=E5=9C=BA=E5=8A=A8=E7=94=BB=E3=80=81=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=88=86=E7=B1=BB=E5=90=8D=EF=BC=8C=E6=B1=89?= =?UTF-8?q?=E9=80=89=E8=8B=B1=E6=92=AD=E6=94=BE=E6=8C=89=E9=92=AE=E9=80=89?= =?UTF-8?q?=E7=AD=94=E5=90=8E=E6=89=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Views/QuizViewController.swift | 18 ++++++++++++------ .../Views/WordDetailViewController.swift | 15 ++++----------- .../Views/WordListViewController.swift | 2 +- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/LearnEnglish/LearnEnglish/Views/QuizViewController.swift b/LearnEnglish/LearnEnglish/Views/QuizViewController.swift index f48cb48..c13b878 100644 --- a/LearnEnglish/LearnEnglish/Views/QuizViewController.swift +++ b/LearnEnglish/LearnEnglish/Views/QuizViewController.swift @@ -28,6 +28,12 @@ final class QuizViewController: UIViewController { private let promptStack = UIStackView() private let inputStack = UIStackView() private let resultStack = UIStackView() + private let navSpeakerItem = UIBarButtonItem( + image: UIImage(systemName: "speaker.wave.2.fill"), + style: .plain, + target: nil, + action: nil + ) private var current: QuizQuestion? { questions.indices.contains(currentIndex) ? questions[currentIndex] : nil @@ -110,12 +116,9 @@ final class QuizViewController: UIViewController { nextButton.configuration = nextConfig nextButton.addAction(UIAction { [weak self] _ in self?.primaryButtonTapped() }, for: .touchUpInside) - navigationItem.rightBarButtonItem = UIBarButtonItem( - image: UIImage(systemName: "speaker.wave.2.fill"), - style: .plain, - target: self, - action: #selector(speakCurrentWord) - ) + navSpeakerItem.target = self + navSpeakerItem.action = #selector(speakCurrentWord) + navigationItem.rightBarButtonItem = navSpeakerItem let headerStack = UIStackView(arrangedSubviews: [progressView, countLabel]) headerStack.axis = .vertical @@ -163,6 +166,8 @@ final class QuizViewController: UIViewController { resultLabel.isHidden = true resultPhoneticLabel.isHidden = true + navigationItem.rightBarButtonItem = config.mode == .zhToEn ? nil : navSpeakerItem + let isSpelling = config.mode == .spelling let isDictation = config.mode == .dictation let isChoice = !isSpelling && !isDictation @@ -290,6 +295,7 @@ final class QuizViewController: UIViewController { icon.transform = .identity } } + navigationItem.rightBarButtonItem = navSpeakerItem showResult(correct, for: question) } diff --git a/LearnEnglish/LearnEnglish/Views/WordDetailViewController.swift b/LearnEnglish/LearnEnglish/Views/WordDetailViewController.swift index 629dafb..1797b75 100644 --- a/LearnEnglish/LearnEnglish/Views/WordDetailViewController.swift +++ b/LearnEnglish/LearnEnglish/Views/WordDetailViewController.swift @@ -2,16 +2,17 @@ import UIKit final class WordDetailViewController: UIViewController { private let word: Word + private let categoryName: String private let speech = SpeechService.shared private let speakButton = UIButton(type: .system) private let exampleSpeakButton = UIButton(type: .system) private let contentStack = UIStackView() private var speechObserver: NSObjectProtocol? - private var didAnimateEntry = false - init(word: Word) { + init(word: Word, categoryName: String = "") { self.word = word + self.categoryName = categoryName super.init(nibName: nil, bundle: nil) } @@ -27,7 +28,7 @@ final class WordDetailViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .systemBackground - title = word.word + title = categoryName navigationItem.largeTitleDisplayMode = .never buildLayout() updateSpeakState() @@ -38,14 +39,6 @@ final class WordDetailViewController: UIViewController { } } - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - if !didAnimateEntry { - didAnimateEntry = true - contentStack.animateEntry(distance: 16, duration: 0.35) - } - } - private func updateSpeakState() { let wordSpeaking = speech.isSpeaking(word.word) speakButton.configuration?.image = UIImage( diff --git a/LearnEnglish/LearnEnglish/Views/WordListViewController.swift b/LearnEnglish/LearnEnglish/Views/WordListViewController.swift index c4222dd..597ff57 100644 --- a/LearnEnglish/LearnEnglish/Views/WordListViewController.swift +++ b/LearnEnglish/LearnEnglish/Views/WordListViewController.swift @@ -148,6 +148,6 @@ extension WordListViewController: UITableViewDataSource, UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { Haptics.selection() navigationController?.pushViewController( - WordDetailViewController(word: category.words[indexPath.row]), animated: true) + WordDetailViewController(word: category.words[indexPath.row], categoryName: category.name), animated: true) } }