如何在UISearchBar中显示WebView当前页面的URL
解决WebView URL无法显示在UISearchBar的问题
问题核心是类型不匹配:myWebView.url是可选的URL对象,而UISearchBar.text需要String?类型,直接赋值会因类型兼容问题失效。结合WebView的生命周期回调,正确实现方式如下:
针对WKWebView(推荐使用)
- 给WebView设置导航代理:
myWebView.navigationDelegate = self
- 实现
WKNavigationDelegate的加载完成回调,安全解包URL并转为字符串后赋值给搜索栏:
extension YourViewController: WKNavigationDelegate { func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { if let currentURLString = webView.url?.absoluteString { // 确保在主线程更新UI(部分场景下代理方法可能在后台线程执行) DispatchQueue.main.async { self.mySearchBar.text = currentURLString } } } }
针对UIWebView(已废弃,不推荐)
- 设置WebView的代理:
myWebView.delegate = self
- 实现
UIWebViewDelegate的加载完成回调:
extension YourViewController: UIWebViewDelegate { func webViewDidFinishLoad(_ webView: UIWebView) { if let currentURLString = webView.request?.url?.absoluteString { DispatchQueue.main.async { self.mySearchBar.text = currentURLString } } } }
额外检查点
- 确认
mySearchBar的IBOutlet已正确连接,无nil引用问题; - 若需在页面跳转过程中实时更新URL,可使用
webView(_:didStartProvisionalNavigation:)(WKWebView)或webView(_:shouldStartLoadWith:navigationType:)(UIWebView)方法触发更新。
内容的提问来源于stack exchange,提问作者Sheft
相关产品推荐
相关产品推荐

