import SwiftUI
import WebKit
// MARK: - 配置区域
let minRange = 1 // 随机数最小值
let maxRange = 999 // 随机数最大值
// 网址模板
var urlTemplate = "https://www.a.com/page/{num}"
// MARK: - 主要视图
struct ContentView: View {
@StateObject private var viewModel = WebViewModel()
var body: some View {
ZStack {
// ✅ 背景:网页视图
WebView(webView: viewModel.webView, url: $viewModel.url)
.ignoresSafeArea()
// ✅ 前景:控制按钮
VStack {
Spacer() // 将按钮推到屏幕底部
HStack {
// --- 新增:回到第一页按钮 ---
Button(action: {
viewModel.loadFirstPage()
}) {
Image(systemName: "house.fill") // 首页图标
.font(.title2)
.foregroundColor(.white)
.frame(width: 50, height: 50)
.background(Color.green) // 绿色背景
.clipShape(Circle())
.shadow(radius: 5)
}
.padding() // 左侧留白
// --- 结束新增 ---
Spacer() // 将右边的按钮推到最右边
// ✅ 原有的:刷新按钮 (保持不变)
Button(action: {
viewModel.loadRandomPage()
}) {
Image(systemName: "arrow.clockwise")
.font(.title2)
.foregroundColor(.white)
.frame(width: 50, height: 50)
.background(Color.blue)
.clipShape(Circle())
.shadow(radius: 5)
}
.padding() // 右侧留白
}
}
}
.onAppear {
viewModel.loadRandomPage() // 启动时加载随机页
}
}
}
// MARK: - 视图模型 (ViewModel) - 已添加新方法
class WebViewModel: ObservableObject {
let webView = WKWebView()
@Published var url: URL?
// 生成随机数并加载网页
func loadRandomPage() {
let randomNumber = Int.random(in: minRange...maxRange)
loadPage(number: randomNumber)
}
// --- 新增方法:回到第一页 ---
func loadFirstPage() {
loadPage(number: minRange) // 直接跳转到 minRange (即第一页)
}
// --- 结束新增 ---
// 提取公共逻辑,避免重复代码
private func loadPage(number: Int) {
let urlString = urlTemplate.replacingOccurrences(of: "{num}", with: "\(number)")
if let url = URL(string: urlString) {
print("🔄 加载网页: \(url)")
self.url = url
webView.load(URLRequest(url: url))
}
}
}
// MARK: - WKWebView 的 SwiftUI 封装 (保持不变)
struct WebView: UIViewRepresentable {
let webView: WKWebView
@Binding var url: URL?
func makeUIView(context: Context) -> WKWebView {
webView.navigationDelegate = context.coordinator
return webView
}
func updateUIView(_ uiView: WKWebView, context: Context) {
if let url = url {
uiView.load(URLRequest(url: url))
}
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, WKNavigationDelegate {
var parent: WebView
init(_ parent: WebView) {
self.parent = parent
}
}
}