Swift playground 网页刷新切换随机页面的网页查看器WebKit

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

}

}

}

相关推荐
桃子叔叔2 天前
基于SWIFT框架的预训练微调和推理实战指南之完整实战项目
大模型·swift
菜的不敢吱声2 天前
swift学习第5天
学习·ssh·swift
符哥20082 天前
Swift开发app常见第三方库
学习·swift
初级代码游戏3 天前
iOS开发 SwiftUI 5 : 文本输入 密码输入 多行输入
ios·swiftui·swift
菜的不敢吱声3 天前
swift学习第4天
服务器·学习·swift
菜的不敢吱声4 天前
swift学习第2,3天
python·学习·swift
大熊猫侯佩5 天前
拒绝“假死”:为何上滑关闭是测试大忌?揭秘 iOS 真实 OOM 触发指南
app·swift·apple
大熊猫侯佩5 天前
Swift 6.2 列传(第十六篇):阿朱的“易容术”与阿紫的“毒药测试”
swift·编程语言·apple
麦兜*5 天前
【Swift】苹果App开发全流程解析:从Xcode配置到App Store上架避坑指南
xcode·swift