使用 webview 后如何使用 segue?

Posted

技术标签:

【中文标题】使用 webview 后如何使用 segue?【英文标题】:how to use segue after using webview? 【发布时间】:2019-12-18 15:38:15 【问题描述】:

当我退出 web 视图时如何执行 segue?它不断抛出 sigbart 错误

class Sample: UIViewController, WKUIDelegate
    var url = String()
    @IBOutlet var webView: WKWebView!
    override func viewDidLoad() 
        super.viewDidLoad()
        let myURL = URL(string:"\(url)")
        let myRequest = URLRequest(url: myURL!)
        webView.configuration.preferences.javascriptEnabled = true
        webView.load(myRequest)
        DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) 
            self.performSegue(withIdentifier: "toMain", sender: self)
        
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        webView.stopLoading()
       

【问题讨论】:

var url = String() 有上一个视图传过来的数据 您应该将第 3 行更改为 @IBOutlet var webView: WKWebView? 并将所有对 webView 的引用替换为 webView? 以避免分段错误 【参考方案1】:

如果 webview 在 segue 上崩溃,则不应该与它有关。如果您尝试推送到新控制器,请确保您的标识符设置如下:

如果您只是想返回一个控制器,您可以使用:

self.dismiss(animated: true, completion: nil)

代替:

self.performSegue(withIdentifier: "toMain", sender: self)

如果您需要返回多个视图,请查看 unwindToSegue 功能。

我还会考虑将 stopLoading 函数移至 viewWillDisappear,因为它与 segue 本身无关。

override func viewWillDisappear(_ animated: Bool) 
    super.viewWillDisappear(animated)

    self.webView.stopLoading()

【讨论】:

解雇工作,但我想去不同的观点,而不是前一个。但是在使用 segue 时,我不断收到 sigbart 错误。 segue 适用于不同的视图,但是当我尝试退出 webview 时,它会不断抛出 sigbart 错误。我还仔细检查了标识符,它与我的代码完全一样 您尝试访问的视图控制器是否已经在堆栈中? 是的。解雇函数有效,但我需要传递数据,所以我需要使用 segue。我也没有任何按钮。满足条件后自动返回主模块。 抱歉,这似乎超出了原始问题的范围。如果您想了解如何在解雇时传递数据,请尝试:***.com/a/43706791/12555191

以上是关于使用 webview 后如何使用 segue?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中使用 shouldPerformSegue() 检查字段后如何继续使用 segue

使用 segue 向后导航时如何重新加载容器视图?

执行 segue 后如何删除 UIViewController?

在同一个 webView 中加载不同页面的按钮

单击TableView部分中的任意位置后如何执行segue?

使用flutter_webview_plugin加载页面后如何在WebView中执行JavaScript代码