
//
// WKWebView+removeDone.swift
// WebViewDone
import Foundation
import WebKit
extension WKWebView {
func removeDoneButton() {
guard let target = scrollView.subviews.first(where: {
String(describing: type(of: $0)).hasPrefix("WKContent")
}), let superclass = target.superclass else {
return
}
let noInputAccessoryViewClassName = "\(superclass)_NoInputAccessoryView"
var newClass: AnyClass? = NSClassFromString(noInputAccessoryViewClassName)
if newClass == nil, let targetClass = object_getClass(target), let classNameCString = noInputAccessoryViewClassName.cString(using: .ascii) {
newClass = objc_allocateClassPair(targetClass, classNameCString, 0)
if let newClass = newClass {
objc_registerClassPair(newClass)
}
}
guard let noInputAccessoryClass = newClass, let originalMethod = class_getInstanceMethod(NoInputAccessoryView.self, #selector(getter: NoInputAccessoryView.inputAccessoryView)) else {
return
}
class_addMethod(noInputAccessoryClass.self, #selector(getter: NoInputAccessoryView.inputAccessoryView), method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod))
object_setClass(target, noInputAccessoryClass)
}
}
fileprivate final class NoInputAccessoryView: NSObject {
@objc var inputAccessoryView: AnyObject? { return nil }
}
WKWebViewにinputAccessoryViewプロパティがあるがread-onlyなため、自分で作ったNoInputAccessoryView
にSwizzleする感じ
あとはWebViewから呼ぶだけ
webView.removeDoneButton()

消えた。あとはOSのアップデート等でこの辺が変更にならないことを祈るのみ。