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

}

}

}

相关推荐
Swift社区3 天前
LeetCode 391 完美矩形 - Swift 题解
算法·leetcode·swift
升讯威在线客服系统4 天前
从 GC 抖动到稳定低延迟:在升讯威客服系统中实践 Span 与 Memory 的高性能优化
java·javascript·python·算法·性能优化·php·swift
Swift社区4 天前
LeetCode 390 消除游戏 - Swift 题解
leetcode·游戏·swift
东坡肘子5 天前
春晚、机器人、AI 与 LLM -- 肘子的 Swift 周报 #124
人工智能·swiftui·swift
BatmanWayne8 天前
swift-微调补充
人工智能·swift
疯笔码良12 天前
【swiftUI】实现自定义的底部TabBar组件
ios·swiftui·swift
东坡肘子13 天前
祝大家马年新春快乐! -- 肘子的 Swift 周报 #123
人工智能·swiftui·swift
BatmanWayne13 天前
swift微调记录
微调·swift
追夢秋陽14 天前
Cocoa 使用NSCollectionView显示列表,数据不足布局异常处理
macos·objective-c·cocoa·swift·collectionview
新缸中之脑14 天前
SaaS 大灭绝
开发语言·ios·swift