使用WKWebView修改键盘工具栏/附件视图
我正在使用带有内容可编辑div的WKWebView作为富文本编辑器的核心,并且想要修改键盘上方的顶部工具栏 – 包含自动更正建议和格式按钮的工具栏。 (不确定这是否算作输入附件视图)。
我发现了一些post显示了如何删除栏,但它们似乎都没有工作,理想情况下我还是要保留自动更正部分。
至少有一个应用程序Ulysses这样做(虽然我不知道它是否带有Web视图):
事实上,我很确定我可以通过在键盘视图层次上进行手术来实现它……但这似乎是一种单调乏味的方法。
有没有更好的办法?
谢谢!
也许这个关于UITextInputAssistantItem
教程会有所帮助。
也就是说,在摆弄了一段时间之后,使用WKWebView
我仍然只能在第一次显示键盘时才能使用它,并且每次在此之后它将返回到其原始状态。 我发现始终如一地工作的唯一事情如下:
class ViewController: UIViewController { @IBOutlet weak private var webView: WKWebView! private var contentView: UIView? override func viewDidLoad() { super.viewDidLoad() webView.loadHTMLString("", baseURL: nil) for subview in webView.scrollView.subviews { if subview.classForCoder.description() == "WKContentView" { contentView = subview } } inputAssistantItem.leadingBarButtonGroups = [UIBarButtonItemGroup(barButtonItems: [UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(donePressed(_:)))], representativeItem: nil)] inputAssistantItem.trailingBarButtonGroups = [UIBarButtonItemGroup(barButtonItems: [UIBarButtonItem(barButtonSystemItem: .camera, target: self, action: #selector(openCamera(_:))), UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(actionPressed(_:)))], representativeItem: nil)] NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: .UIKeyboardDidShow, object: nil) } @objc private func donePressed(_ sender: UIBarButtonItem) { view.endEditing(true) } @objc private func openCamera(_ sender: UIBarButtonItem) { print("camera pressed") } @objc private func actionPressed(_ sender: UIBarButtonItem) { print("action pressed") } @objc private func keyboardDidShow() { contentView?.inputAssistantItem.leadingBarButtonGroups = [UIBarButtonItemGroup(barButtonItems: [UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(donePressed(_:)))], representativeItem: nil)] contentView?.inputAssistantItem.trailingBarButtonGroups = [UIBarButtonItemGroup(barButtonItems: [UIBarButtonItem(barButtonSystemItem: .camera, target: self, action: #selector(openCamera(_:))), UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(actionPressed(_:)))], representativeItem: nil)] } }
它会给出这样的东西:
每次键盘显示以及视图控制器本身都必须在内容视图上设置它有点令人沮丧,我希望有更好的方法来做到这一点….但不幸的是我找不到它。