gpt4 book ai didi

ios - 从WKWebView中的自定义UIMenuItem获取选定的文本

转载 作者:行者123 更新时间:2023-12-01 16:01:59 63 4
gpt4 key购买 nike

我正在创建一个具有自定义UIMenuItem的iOS应用。在WKWebView中选择文本时,将显示此新的自定义UIMenuItem。我如何获得选定的文本。

我按照https://stackoverflow.com/a/49761522/6828076中的说明创建自定义UIMenuItem。它工作正常,但是我需要点击自定义UIMenuItem时使用的选定文本。关于使用UIPasteboard的文章很多,但是自定义项不会将所选文本复制到UIPasteboard中,因此我无法检索到它。

func setupCustomMenu() {
let customMenuItem = UIMenuItem(title: "Foo", action:
#selector(ViewController.transelateMenuTapped))
UIMenuController.shared.menuItems = [customMenuItem]
UIMenuController.shared.update()
}

@objc func transelateMenuTapped() {
let yay = //Need to retrieve the selected text here
let alertView = UIAlertController(title: "Yay!!", message: yay, preferredStyle: .alert)
alertView.addAction(UIAlertAction(title: "cool", style: .default, handler: nil))
present(alertView, animated: true, completion: nil)
}

最佳答案

您可以为此使用Javascript。

这是您使用的答案中的代码,通过对WKWebView上的Javascript进行评估,对代码进行了些微改动以获取选定的文本:

import UIKit
import WebKit

class ViewController: UIViewController {
weak var webView: CustomMenuWebView!

override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
prepareWebView()
}

@objc func translateMenuTapped(_ test: Any) {
webView.evaluateJavaScript("window.getSelection().toString()") { (test, error) in
guard let test = test as? String, error == nil else { return }
// ***** Here's the user's selected text *****
print(test)
}
}
}

private extension ViewController {
func prepareWebView() {
addWebViewToView()
loadWebViewContent()
setupCustomMenu()
}

func addWebViewToView() {
let webView = CustomMenuWebView(
frame: view.bounds, configuration: WKWebViewConfiguration())
view.addSubview(webView)
self.webView = webView
}

func loadWebViewContent() {
let url = URL(string: "https://www.google.com")
let request = URLRequest(url: url!)
webView.load(request)
}

func setupCustomMenu() {
let customMenuItem = UIMenuItem(
title: "Translate", action: #selector(ViewController.translateMenuTapped))
UIMenuController.shared.menuItems = [ customMenuItem ]
UIMenuController.shared.update()
}
}

class CustomMenuWebView: WKWebView {
// Turn off all other menu items
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
return false
}
}

关于ios - 从WKWebView中的自定义UIMenuItem获取选定的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53982186/

63 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com