You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
      }
      

内容的提问来源于stack exchange,提问作者Teodoro Villanueva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:50:52