长按识别器结束后调用 wkwebviewdecidePolicyForNavigationAction

2023-12-14

我试图覆盖原来的 wkwebview 操作表......

首先,我禁用了原始的 wkactionsheetwebView.evaluateJavaScript("document.body.style.webkitTouchCallout='none';", completionHandler: nil)

然后我初始化了一个长按手势识别器(它工作得很好),并创建了我自己的操作表。我使用decidePolicyForNavigationAction来获取点击的链接网址:

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!.absoluteString 获取 URL (longPressAcUrl)!


首先,没有必要模仿 Chrome 的行为,因为这对整个体验几乎没有影响。事实上,我们可以推测,在手指松开后显示它的方法比 Chrome 和 Safari 的做法更好。

Why?

因为您正在使用整个生态系统中无处不在的标准长按识别的标准行为。

我相信 Safari 会在用户按下按钮时显示操作表,以给人一种一切都在发生的错觉FAST.

无论如何,您可以通过创建自定义 UIWindow、实现您自己的长按识别并使用保存的坐标获取 HTML 元素来“修复”此问题。有关如何创建整个行为的指南,请查看此链接:http://www.icab.de/blog/2010/07/11/customize-the-contextual-menu-of-uiwebview/comment-page-3/

(目标-C)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

长按识别器结束后调用 wkwebviewdecidePolicyForNavigationAction 的相关文章

  • 如何使用 Swift 将文本复制到剪贴板/粘贴板

    我正在寻找一个干净的示例 说明如何将文本复制到 iOS 剪贴板 然后可以在其他应用程序中使用 粘贴 该功能的好处是可以快速复制文本 无需传统文本复制的标准文本突出显示功能 我假设关键课程位于UIPasteboard 但在中找不到相关区域他们
  • UIView表面自定义变换/动画(如“水滴效果”)

    实施方式是什么自定义转换 动画 在视图表面 类似于所附图片 not只是视图边界 问题主要在于一般的方法是什么做到这一点 不完全是 水滴效应 但任何例子肯定会受到赞赏 我想 这是层布局 网格 的某种 算法 转换 但不确定以哪种方式 挖掘 它
  • 具有函数的 NSSortDescriptor

    我在使用 NSSortDescriptor 方面的经验有限 它可以通过一键进行排序 而且效果很好 但这是我现在需要的 我有一组数字对 例如 2 3 44 5 6 17 33 7 173 21 我想根据给定函数 myfunction x y
  • iOS 获取特定语言的字符串的本地化版本

    我正在构建一个适用于 iOS 的应用程序 该应用程序将提供英语和法语版本 我已经阅读了一些有关国际化的教程 并且了解了它的工作原理以及我需要做什么 我遇到的问题是有一个特定的情况 我想为英语用户加载法语字符串 我知道可以为整个应用程序设置语
  • CGFloat 和 NSNumber 之间的转换,无需不必要地提升为 Double

    众所周知 CGFloat 在 CoreGraphics UIKit 等中普遍存在 可以是 32 位或 64 位浮点数 具体取决于 处理器架构 In C CGFloat它是一个类型别名 到float or double 在 Swift 中它被
  • 使用仪器分配时 iOS 应用程序冻结

    当我想使用 Instruments Allocation 来分析应用程序的内存使用情况时 它在启动后立即冻结 它总是停留在启动屏幕 这是一个 Xamarin forms 应用程序 这是屏幕截图 其他信息 如果我创建一个新项目 然后使用 In
  • GoogleMobileAds iOS 9 链接错误

    我按照以下步骤操作this https firebase google com docs admob ios quick start 由于我在安装 cocoapods 时遇到问题 我手动下载了 SDK zip 将其添加到项目中 它编译得很好
  • MFMailComposeViewController 立即关闭

    情况是 MFMailComposeViewController 将被呈现 我看到它已经完成了一半 但后来就被驳回了 这是错误 serviceViewControllerReady 错误 错误域 UIViewServiceInterfaceE
  • [UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:]

    我正在使用表格视图来显示消息 我使用了下面的代码 UIView chatView self bubbleView NSString stringWithFormat message from YES self chatArray addOb
  • 在 Swift 2.0 中以横向模式使用 UIImagePickerController

    我正在编写一个仅限 LandScape 的 iPad 应用程序 我需要从库中拍照以发送数据库 但图像上传屏幕仅适用于纵向模式 如何将其更改为横向模式 我读过一些关于 UIPickerControllerDelegate 不支持横向模式的内容
  • UISearchDisplayController 显示父 UITableViewController 的标题部分

    I am facing strange issue with UITableViewController I display search result in UISearchDisplayController If I have some
  • 单击时未调用 UITableView didSelectRowatIndexPath

    非常非常奇怪 它在任何地方都有效 但在这里 void tableView UITableView aTableView didSelectRowAtIndexPath NSIndexPath indexPath MyViewControll
  • WKWebView 中的调整大小处理程序中的 window.innerWidth/Height 未更新

    我有一些全屏网页内容 当窗口使用调整大小事件更改大小时 我会更新这些内容 window onresize function var width window innerWidth var height window innerHeight
  • swift 中 pch 的替代品是什么?

    我想知道可以用什么来代替 swift 中的 pch 有没有 pch 的替代方案或方法可以快速摆脱导入 这样我们就不需要对所有类都这样做 我不想一直随身携带 进口 swift 中 pch 的最佳替代品是什么 您无法在 swift 中定义 宏
  • 无法为 FacebookSDK 4 构建模块“FBSDKCoreKit”

    我在将 Facebook SDK 3 更新到 4 时遇到问题 当我添加框架时 它已成功添加 但是当我添加头文件时出现错误 无法构建模块 FBSDKCoreKit 不知道原因 在设置中 允许非模块化包含在框架模块中 设置为YES在构建设置中解
  • 隐藏故事板中的导航栏

    谁能告诉我如何隐藏故事板中的导航栏 我下面的代码在模拟器中运行时工作正常 但它仍然出现在我的故事板中 这真的很烦我 因为它弄乱了我的图像的位置 有人可以帮忙吗 void viewWillAppear BOOL animated super
  • 如何在 SceneKit 中以编程方式将 png 纹理包裹在立方体周围

    我是 SceneKit 的新手 试图让一些基本的东西工作 但到目前为止还没有取得多大成功 由于某种原因 当我尝试将 png 纹理应用于 CNBox 时 我最终除了黑色之外什么也没有 这是我在 viewDidLoad 中的简单代码片段 let
  • 在 iOS 中,如何以编程方式填写 pdf 表单字段?

    我需要获取一个现有的 pdf 文件 并以编程方式填写带有文本的表单字段列表 然后保存 pdf 而不将其显示给用户 例如 如果 pdf 文件包含名为 LastName 和 FirstName 的字段 我想将 FirstName 的值设置为 L
  • 获取在 iOS UIFont 中追踪字符的路径

    假设我在 iOS 应用程序中使用了自定义字体 Foo 我已将其添加到我的项目 plist 等中 并且我能够渲染UILabels之类的就很好了 现在 如果我想找出可以 追踪 该字体中的字母 P 的点序列 我将如何获得该点序列 例如 假设我想使
  • 根据 Swift 中的列表选择在 ViewController 之间传递值

    我试图将 listView 选择的选定索引号从一个 ViewController 传递到另一个 ViewController 但遇到了 tableView didSelectRowAtIndexPath 委托运行时间稍晚于prepareFo

随机推荐