我有一个视图控制器(WKWebViewController),它嵌入在导航控制器中。此视图控制器显示了一个 WKWebView,在导航到任何网页后,长按包括电话号码或链接等检测到的内容时,将显示一个操作表,其中包含复制、共享等选项。问题在于当这个操作表被解除时,WKWebViewController 也随之消失,并显示根视图控制器!无论选择是复制、取消,还是在屏幕上任何地方点击。
我尝试重写“present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil)”和“dismiss(animated flag: Bool, completion: (() -> Void)?)”,以尝试了解发生了什么,但然后意识到操作表既没有由其父视图控制器(WKWebViewController)呈现,也没有被其父视图控制器解除。事实上,我在根视图控制器上做了同样的事情,并发现它也没有被展示在根视图控制器上。
我进行了大量搜索,试图理解是什么原因导致了这种行为,我甚至建立了一个只有简单 WKWebView 的新项目,结果总是遇到同样的问题。
这是代码:
import UIKit; import WebKit
class WKWebViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {
var destinationUrlString: String?
var myWebView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let webConfiguration = WKWebViewConfiguration()
webConfiguration.dataDetectorTypes = []
let origin = CGPoint(x: 0, y: 0)
let size = CGSize(width: view.frame.size.width, height: view.frame.size.height)
myWebView = WKWebView(frame: .init(origin: origin, size: size), configuration: webConfiguration)
myWebView.uiDelegate = self
myWebView.navigationDelegate = self
myWebView.allowsLinkPreview = false
view = myWebView
destinationUrlString = "https://www.stackoverflow.com"
guard let url = URL(string: destinationUrlString!) else {return}
print(url)
let request = URLRequest(url: url)
myWebView.load(request)
}
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
//show progress indicator
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
//dismiss progress indicator
}
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
//show error
}
func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
//show error
}
}
我还附上了一个GIF显示问题:
我使用的是Xcode 9.3(9E145)和Swift 4.1。
我错过了什么吗? 如何修复? 非常感谢您的任何帮助。
.cancel
样式的操作吗? - thorb65