我正在使用带有可编辑内容的 div 的 WKWebView 作为富文本编辑器的核心,并且想修改键盘上方的顶部工具栏——包含自动更正建议和格式设置按钮的工具栏。 (不确定这是否算作输入附件 View )。
我找到了一些展示如何删除栏的帖子,但它们似乎都不起作用,理想情况下我还是想保留自动更正部分。
至少有一个应用程序 Ulysses 可以做到这一点(虽然我不知道它是否具有 WebView ):
事实上,我很确定我可以通过对键盘 View 层次结构进行手术来实现它……但这似乎是一种乏味且脆弱的方法。
有没有更好的办法?
谢谢!
最佳答案
也许 this tutorial在 UITextInputAssistantItem
上会有帮助。
也就是说,在摆弄了一段时间之后,使用 WKWebView
我仍然只能在第一次显示键盘时让它工作,之后每次它都会返回到它的状态原始状态。我发现唯一始终如一的工作是像下面这样的东西:
class ViewController: UIViewController {
@IBOutlet weak private var webView: WKWebView!
private var contentView: UIView?
override func viewDidLoad() {
super.viewDidLoad()
webView.loadHTMLString("<html><body><div contenteditable='true'></div></body></html>", 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)]
}
}
它会给出这样的东西:
每次键盘显示时都必须在内容 View 以及 View Controller 本身上设置它有点令人沮丧,我希望有更好的方法来做到这一点......但不幸的是我不能找到它。
关于ios - 使用 WKWebView 修改键盘工具栏/附件 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48978134/