也许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)]
}
}
它会给出这样的结果:
每次键盘显示时都必须在内容视图以及视图控制器本身上设置它有点令人沮丧,我希望有更好的方法来做到这一点......但不幸的是我不能找到它。