Swift新手求助:如何将UITextField字符串转为URL并在UIWebView加载
解决Swift中UITextField输入转URL并在UIWebView加载的问题
嘿,作为Swift新手碰到这种概念混淆太正常了,我来一步步帮你搞定这个需求,顺便聊聊要不要存储的问题~
核心步骤拆解
1. 第一个ViewController:处理输入、转成合法URL并传值
首先你需要给第一个VC的UITextField和UIButton建立IBOutlet和IBAction(在Storyboard里拖拽关联就行),然后处理按钮点击事件:
import UIKit class FirstViewController: UIViewController { // 关联你的输入框 @IBOutlet weak var urlTextField: UITextField! override func viewDidLoad() { super.viewDidLoad() urlTextField.placeholder = "输入网址(如https://www.example.com)" } // 按钮点击触发的方法 @IBAction func openWebViewTapped(_ sender: UIButton) { // 先收起键盘 urlTextField.resignFirstResponder() // 校验输入内容不为空 guard let inputText = urlTextField.text, !inputText.trimmingCharacters(in: .whitespaces).isEmpty else { let alert = UIAlertController(title: "提示", message: "请输入网址内容", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "好的", style: .default)) present(alert, animated: true) return } // 处理URL前缀:用户可能忘了加http/https,UIWebView必须要完整的URL协议 var formattedURLString = inputText if !formattedURLString.hasPrefix("http://") && !formattedURLString.hasPrefix("https://") { formattedURLString = "https://" + formattedURLString } // 转成合法的URL对象 guard let targetURL = URL(string: formattedURLString) else { let alert = UIAlertController(title: "错误", message: "输入的不是合法网址哦", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "重新输入", style: .default)) present(alert, animated: true) return } // 通过Segue跳转到第二个VC,记得先给Storyboard里的Segue设置identifier(比如"ToWebViewSegue") performSegue(withIdentifier: "ToWebViewSegue", sender: targetURL) } // 准备给第二个VC传值 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "ToWebViewSegue" { // 把目标URL传给第二个VC if let webVC = segue.destination as? SecondViewController, let url = sender as? URL { webVC.targetURL = url } } } }
2. 第二个ViewController:用UIWebView加载URL
给第二个VC的UIWebView建立IBOutlet,然后接收第一个VC传过来的URL并加载:
import UIKit class SecondViewController: UIViewController { // 关联你的UIWebView @IBOutlet weak var webView: UIWebView! // 用来接收第一个VC传过来的URL var targetURL: URL? override func viewDidLoad() { super.viewDidLoad() // 加载目标URL if let validURL = targetURL { let webRequest = URLRequest(url: validURL) webView.loadRequest(webRequest) } } }
⚠️ 注意:UIWebView已经被苹果弃用了(从iOS 12开始就不推荐使用),建议换成WKWebView,用法几乎一致,只需要把代码改成这样:
import UIKit import WebKit class SecondViewController: UIViewController { @IBOutlet weak var webView: WKWebView! var targetURL: URL? override func viewDidLoad() { super.viewDidLoad() if let validURL = targetURL { let webRequest = URLRequest(url: validURL) webView.load(webRequest) } } }
关于是否需要存储内容
这完全取决于你的需求:
- 如果只是临时使用(比如这次打开App输入网址,关闭App后不需要记住):不需要存储,直接通过Segue传值就够了。
- 如果希望下次打开App还能记住上次输入的网址:可以用
UserDefaults做轻量存储,非常简单:- 在第一个VC的按钮点击事件里,转成合法URL后添加存储代码:
// 存储到UserDefaults UserDefaults.standard.set(formattedURLString, forKey: "LastVisitedURL") - 在第一个VC的
viewDidLoad里读取并设置到输入框:if let lastURL = UserDefaults.standard.string(forKey: "LastVisitedURL") { urlTextField.text = lastURL }
- 在第一个VC的按钮点击事件里,转成合法URL后添加存储代码:
内容的提问来源于stack exchange,提问作者Teodoro Villanueva
相关产品推荐
相关产品推荐

