我试图覆盖原来的wkwebview动作表......
首先,我按webView.evaluateJavaScript("document.body.style.webkitTouchCallout='none';", completionHandler: nil)
然后我初始化一个长按手势识别器(它完美地工作),我创建了自己的操作表。我使用了decisionPolicyForNavigationAction来获取点击的链接网址:
func onLongPress(gestureRecognizer:UIGestureRecognizer){
if gestureRecognizer.state == UIGestureRecognizerState.Began {
longPressSwitch = true
}
}
func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
if(navigationAction.navigationType == .LinkActivated) {
longPressAcUrl = navigationAction.request.URL!.absoluteString
if(longPressSwitch == true) {
let ac = actionMenu(self)
self.presentViewController(ac, animated: true) {
}
decisionHandler(.Cancel)
longPressSwitch = false
}
}
decisionHandler(.Allow)
}
问题是,手指释放后会显示操作表(即recogniser.state = .Ended),但我希望它显示为Chrome,用户按下链接后应为0.5秒或更短时间。 ..(即recogniser.state = .Begin),我该怎么办?
ps:这是我的行动表:
//Rebuild Wkactionsheet
func actionMenu(sender: UIViewController) -> UIAlertController {
let alertController = UIAlertController(title: "", message: longPressAcUrl, preferredStyle: .ActionSheet)
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in
}
alertController.addAction(cancelAction)
let openAction = UIAlertAction(title: "Open", style: .Default) { (action) in
//...
}
alertController.addAction(openAction)
let opentabAction = UIAlertAction(title: "Open in New Tab", style: .Default) { (action) in
//...
}
alertController.addAction(opentabAction)
let copyurlAction = UIAlertAction(title: "Copy Link URL", style: .Default) { (action) in
//...
}
alertController.addAction(copyurlAction)
return alertController
}
另外,如果我试图放
let ac = actionMenu(self)
self.presentViewController(ac, animated: true) {}
在onLongPress()上,它工作正常,虽然这不能从navigationAction.request.URL获取URL(longPressAcUrl)!.absoluteString!
答案 0 :(得分:0)
首先,没有必要模仿Chrome的行为,因为对整个体验几乎没有任何影响。事实上,人们可以理解你手指释放后出现的方法比Chrome和Safari正在做的更好。
为什么?
因为您使用的标准长按识别的标准行为在整个生态系统中无所不在。
我相信Safari正在显示操作表,而用户正在按下以表示一切都在发生的错觉 FAST 。
无论如何,您可以通过创建自定义UIWindow来“修复”此问题,实现您自己的长按识别并使用保存的坐标获取HTML的元素。有关如何创建此完整行为的指南,请检查以下链接:http://www.icab.de/blog/2010/07/11/customize-the-contextual-menu-of-uiwebview/comment-page-3/
击><击>(目标C)击>
使用UIGestureRecognizerStateBegan
一般错误:网站将绕过政策决定,并在触摸结束时加载内容。