首页 > 解决方案 > 将数据从 UISearchBar 发送到 jQuery

问题描述

我有一个WKWebView显示index.html哪个运行demo.js

索引页面只显示一个 HTML 表单,用户可以在其中输入一个字符,但我需要用 UISearchBar 替换它。

目前在 jQuery 中(当文档准备好时),我有:

$('.js-char-form').on('submit', function(evt) {
     evt.preventDefault();
     updateCharacter(); // does something important
});

我该如何使用 UISearchBar 来解决这个问题?

我在这里滥用 jQuery 吗?

标签: jqueryiosswiftwebkituisearchbar

解决方案


在视图控制器中,您将需要一个用于单击搜索栏的功能。

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
    searchBar.resignFirstResponder() // hide keyboard
    webView.evaluateJavaScript("changeCharacter('\(searchBar.text ?? "alternative character")')") { (result, error) in
        if error == nil {
            // success, do nothing...
        }
    }
}

然后在 demo.js 中,你会有

function changeCharacter(newCharacter) {
    // do something with newCharacter...
}

本质上,这一切只是运行一个 JavaScript 函数,但用 Swift 上下文中定义的东西替换参数。

此外,如果您想在使用搜索栏后隐藏键盘,您可以使用扩展程序。因此,再次在视图控制器中,您将编写:

extension UIViewController {
    func hideKeyboard() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }

    @objc func dismissKeyboard() {
        view.endEditing(true)
    }
}

推荐阅读