Swift中UITableViewCell跳转UIWebView问题:页面空白无内容
解决WKWebView加载空白的问题
作为Swift新手遇到这种问题很正常,我帮你梳理下代码里的关键问题,一步步来修复:
1. Segue传递的不是实际URL值
在你的UITableView控制器的prepare(for:sender:)方法里,你把athleteURL赋值成了Athlete.Key.rosterURL——这应该是你JSON解析时用的键名(比如字符串"rosterURL"),而不是选中运动员对应的实际URL地址。
假设你有一个存储所有运动员数据的数组(比如var athletes: [Athlete]),你需要根据选中的行索引取出对应的Athlete对象,再获取它的rosterURL属性:
let rosterLinksSegue = "toRosterWebView" override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == rosterLinksSegue, let destination = segue.destination as? RosterLinksViewController, let selectedIndex = tableView.indexPathForSelectedRow?.row { // 替换成你的Athlete数组,取出对应行的实际URL destination.athleteURL = athletes[selectedIndex].rosterURL } }
2. 强制解包URL可能导致无效请求
在RosterLinksViewController里,你直接强制解包URL(string: "\(athleteURL)"),如果athleteURL是空字符串或者格式无效,这个URL会变成nil,强制解包要么崩溃,要么导致WebView加载无效请求而显示空白。建议改成安全的可选绑定:
class RosterLinksViewController: UIViewController { @IBOutlet weak var rosterLinksWebView: WKWebView! var athleteURL = "" override func viewDidLoad() { super.viewDidLoad() // 先检查URL是否有效 guard let url = URL(string: athleteURL) else { print("无效的URL: \(athleteURL)") // 可以在这里给用户显示错误提示,比如添加一个UILabel return } let request = URLRequest(url: url) rosterLinksWebView.load(request) // 去掉!,因为IBOutlet正确连接后不会为nil } }
额外调试小技巧
- 在
prepare(for:sender:)里打印athletes[selectedIndex].rosterURL,确认输出的是完整且正确的URL(比如https://example.com/athlete-profile.html) - 检查WKWebView的Auto Layout约束,确保它没有被其他视图遮挡或者尺寸为0
- 可以给WKWebView设置导航代理,监听加载错误:
// 在viewDidLoad里添加 rosterLinksWebView.navigationDelegate = self // 遵守WKNavigationDelegate协议后实现方法 func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) { print("WebView加载错误: \(error.localizedDescription)") }
内容的提问来源于stack exchange,提问作者tt87
相关产品推荐
相关产品推荐

