【问题标题】:Swift 4 WebkitView URL change not doing its jobSwift 4 WebkitView URL 更改没有发挥作用
【发布时间】:2018-12-17 18:44:07
【问题描述】:

我有以下情况。

我正在使用 WebkitView 来显示一些会话信息。在大多数地方,它是在 ViewController 生效时生成的,但我有一个特定的视图,我必须在用户交互时重新加载它,按钮更改为下个月或上个月。

我有以下代码:

// This is my connection to the storyboard element
@IBOutlet weak var areaNotasMes: WKWebView!

之后我有了一个处理 URL 的函数:

func actualizarUrlNotasMes(fechaNueva: Date) {
    let formateadorAdicional = DateFormatter()
    formateadorAdicional.dateFormat = "yyyyMM"

    let url = URL(string: "https://myurl/\(formateadorAdicional.string(from: fechaNueva))")

    areaNotasMes.load(URLRequest(url: url!))
}

我有一个按钮事件,它使用带有下一个 YEAR_MONTH 组合的函数,如下所示:

@IBAction func mesSigPressed(_ sender: UIButton) {
    // Some more code to get the fechaActual variable
    actualizarUrlNotasMes(fechaNueva: fechaActual)
    // Some more code
}

所以,基本上发生的事情是它在我第一次打开 ViewController 时加载,但是当我单击按钮更改为下个月时,日期会更改,正确生成并传递给函数。它生成正确的 URL,但是当 areaNotasMes.load(...) 函数运行时,WebKitView 上没有任何刷新。我尝试添加areaNotasMes.reload(),但它也没有做任何事情。每次更改 URL 时,我是否都必须销毁并重新创建 WebKitView?还是我没有正确处理 URL 更改?

此外,控制台有时会弹出其中一些消息,但并非总是如此:

[BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C5.1:2][0x7fea2d201de0] get output frames failed, state 8196
TIC Read Status [5:0x0]: 1:57

【问题讨论】:

    标签: swift ios11 ios12


    【解决方案1】:

    不,您不需要在更改 URL 时重新初始化 webview。我无法根据您提供的信息说明问题。我建议您将 ViewController 设置为 webview 的 navigationDelegate 并实施这些方法来尝试诊断问题:

    func webView(WKWebView, didStartProvisionalNavigation: WKNavigation!)
    
    func webView(WKWebView, didFail: WKNavigation!, withError: Error)
    //Called when an error occurs during navigation.
    
     func webView(WKWebView, didFailProvisionalNavigation: WKNavigation!, withError: Error)
    

    文档here

    【讨论】:

    • 老实说,我对 Swift 比较陌生,我应该如何处理这个问题,实现协议或使用 navigationDelegate 扩展视图控制器或将控制器指向 WebKitView。我不知道如何去做你推荐的 Wassim。
    • 是的。让您的 ViewController 符合 WKNavigationDelegate,然后将 webview 的 navigationDelegate 设置为 self.
    • 好的,我做了以下事情:class ElMesController: BaseController, WKNavigationDelegate 然后我做了这个override func viewDidLoad() { ... areaNotasMes.navigationDelegate = self ... } 并在我的控制器中添加了你提到的 3 个函数。在didStartProvisionalNavitagion 里面我添加了一个print("yes") 并且在错误里面我添加了print(error) 每次我更改到下个月时,我都会在控制台中得到一个是的,仅此而已。大约 10-20 秒后,我收到 Boring SSL 和 TIC 消息。没有其他事情发生。
    【解决方案2】:

    我想我实际上设法以最随机的方式解决了这个问题。我想也许有一些重新加载功能(.reload() 除外)所以使用语法的自动完成,我想出了以下命令:

    areaNotasMes.reloadInputViews()

    显然.reloadInputViews() 是一个继承自UIView 的 void 函数,当对象是第一响应者时,它会更新自定义输入和附件视图。你可以在这里查看:reloadInputViews()

    它确实发送了一些 Error Domain=NSURLErrorDomain Code=-999 "(null)",尽管它实际上按预期工作并刷新了 WebKitView 信息。

    我希望这对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      相关资源
      最近更新 更多