详情页释义增加搜索按钮,应用内打开 Google 搜索
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
import SafariServices
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
final class WordDetailViewController: UIViewController {
|
final class WordDetailViewController: UIViewController {
|
||||||
@@ -125,6 +126,20 @@ final class WordDetailViewController: UIViewController {
|
|||||||
meaningLabel.font = .preferredFont(forTextStyle: .title2)
|
meaningLabel.font = .preferredFont(forTextStyle: .title2)
|
||||||
meaningLabel.numberOfLines = 0
|
meaningLabel.numberOfLines = 0
|
||||||
|
|
||||||
|
var searchConfig = UIButton.Configuration.plain()
|
||||||
|
searchConfig.baseForegroundColor = Theme.Color.accent
|
||||||
|
searchConfig.image = UIImage(systemName: "magnifyingglass",
|
||||||
|
withConfiguration: UIImage.SymbolConfiguration(pointSize: 15, weight: .medium))
|
||||||
|
let searchButton = UIButton(type: .system)
|
||||||
|
searchButton.configuration = searchConfig
|
||||||
|
searchButton.addAction(UIAction { [weak self] _ in self?.searchMeaning() }, for: .touchUpInside)
|
||||||
|
searchButton.setContentHuggingPriority(.required, for: .horizontal)
|
||||||
|
|
||||||
|
let meaningRow = UIStackView(arrangedSubviews: [meaningLabel, searchButton])
|
||||||
|
meaningRow.axis = .horizontal
|
||||||
|
meaningRow.alignment = .top
|
||||||
|
meaningRow.spacing = 8
|
||||||
|
|
||||||
let divider = HairlineView()
|
let divider = HairlineView()
|
||||||
|
|
||||||
let exampleTitle = makeCaption("例句")
|
let exampleTitle = makeCaption("例句")
|
||||||
@@ -154,7 +169,7 @@ final class WordDetailViewController: UIViewController {
|
|||||||
exampleRow.alignment = .top
|
exampleRow.alignment = .top
|
||||||
exampleRow.spacing = 8
|
exampleRow.spacing = 8
|
||||||
|
|
||||||
let stack = UIStackView(arrangedSubviews: [meaningTitle, meaningLabel, divider, exampleTitle, exampleRow])
|
let stack = UIStackView(arrangedSubviews: [meaningTitle, meaningRow, divider, exampleTitle, exampleRow])
|
||||||
stack.axis = .vertical
|
stack.axis = .vertical
|
||||||
stack.spacing = 16
|
stack.spacing = 16
|
||||||
stack.setCustomSpacing(6, after: meaningTitle)
|
stack.setCustomSpacing(6, after: meaningTitle)
|
||||||
@@ -171,6 +186,13 @@ final class WordDetailViewController: UIViewController {
|
|||||||
return card
|
return card
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func searchMeaning() {
|
||||||
|
Haptics.selection()
|
||||||
|
guard let query = word.meaning.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),
|
||||||
|
let url = URL(string: "https://www.google.com/search?q=\(query)") else { return }
|
||||||
|
present(SFSafariViewController(url: url), animated: true)
|
||||||
|
}
|
||||||
|
|
||||||
private func makeCaption(_ text: String) -> UILabel {
|
private func makeCaption(_ text: String) -> UILabel {
|
||||||
let label = UILabel()
|
let label = UILabel()
|
||||||
label.text = text
|
label.text = text
|
||||||
|
|||||||
Reference in New Issue
Block a user