在 UIWebView 中向后/向前滑动手势?

Posted

技术标签:

【中文标题】在 UIWebView 中向后/向前滑动手势?【英文标题】:Swipe gesture for back/forward in UIWebView? 【发布时间】:2015-08-14 14:26:40 【问题描述】:

我的应用中有一个 WebView。

因为它是一个选项卡式应用程序,我无法在网站上添加返回/前进按钮。

我想通过滑动来后退/前进。从左侧/边缘向右滑动又回来了……就像在 ios 的 Safari 浏览器中一样。

我该怎么做?我想我应该使用“屏幕边缘平移手势识别器”,对吧?

【问题讨论】:

【参考方案1】:

在 Swift 3 中接受的答案:

override func viewDidLoad() 
    super.viewDidLoad()

    let swipeLeftRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(recognizer:)))
    let swipeRightRecognizer = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe(recognizer:)))
    swipeLeftRecognizer.direction = .left
    swipeRightRecognizer.direction = .right

    webView.addGestureRecognizer(swipeLeftRecognizer)
    webView.addGestureRecognizer(swipeRightRecognizer)


@objc private func handleSwipe(recognizer: UISwipeGestureRecognizer) 
    if (recognizer.direction == .left) 
        if webView.canGoForward 
            webView.goForward()
        
    

    if (recognizer.direction == .right) 
        if webView.canGoBack 
            webView.goBack()
        
    

【讨论】:

【参考方案2】:

在 Swift 3 和 Swift 4 中回答

如果有人仍然有问题。这对我有用:

找到“didFinish”添加/替换以下代码。

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) 

    self.didFinish()

    webView.allowsBackForwardNavigationGestures = true


您需要的主要代码只有一行。它位于 self.didFinish() 之后,但仍在 括号内。

webView.allowsBackForwardNavigationGestures = true

【讨论】:

澄清一下,WKWebView 具有 allowsBackForwardNavigationGestures 属性,而 UIWebView 没有。【参考方案3】:

为什么不直接使用滑动手势识别器?

UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];

// Setting the swipe direction.
[swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];

// Adding the swipe gesture on WebView
[webView addGestureRecognizer:swipeLeft];
[webView addGestureRecognizer:swipeRight];

- (void)handleSwipe:(UISwipeGestureRecognizer *)swipe 

if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) 
    NSLog(@"Left Swipe");


if (swipe.direction == UISwipeGestureRecognizerDirectionRight) 
    NSLog(@"Right Swipe");   
 


【讨论】:

感谢您的回答。把这段代码放在哪里?在[超级viewDidLoad]下;在 ViewController.m 中? 是的,您可以将其添加到您的 viewdidload 中。别客气。如果有效,请务必接受答案:) [imageView addGestureRecognizer:swipeLeft];什么是图像视图?我有一个 WebView。 我得到“使用未声明的标识符 'handleSwipe'”。什么是handleSwipe?我现在能做什么?不需要 ViewController.h 中的代码? (我在 WebView 中添加了“滑动手势识别器”。对吗?) 句柄滑动是它调用的方法,您可以在其中为您的网络视图添加后退操作,是的,这是正确的【参考方案4】:

Gabriel Madruga 的回答对我有用。我通过以下方式进一步减少了代码行数:

    将 WebView 拖放到情节提要中。应用所需的约束。 声明 WebView 的 IBOutlet。我将它命名为 webViewBox。 导入 WebKit 框架。 (导入 WebKit)

    在 viewDidLoad() 中添加以下代码

    let leftSwipe = UISwipeGestureRecognizer(target: webViewBox, action: #selector(webViewBox.goForward))
    leftSwipe.direction = .left
    webViewBox.addGestureRecognizer(leftSwipe)
    
    let rightSwipe = UISwipeGestureRecognizer(target: webViewBox, action: #selector(webViewBox.goBack))
    leftSwipe.direction = .right
    webViewBox.addGestureRecognizer(rightSwipe)
    

您的最终结果应如下所示:

    import UIKit
    import WebKit

    class ViewController: UIViewController 


@IBOutlet weak var webViewBox: WKWebView!

override func viewDidLoad() 
    super.viewDidLoad()


    //URL request:
    let urlReq = URLRequest(url: URL(string: "https://www.google.co.in")!)
    //Load the URL:        
    webViewBox.load(urlReq)



    //To go forward:
    let leftSwipe = UISwipeGestureRecognizer(target: webViewBox, action: #selector(webViewBox.goForward))
    leftSwipe.direction = .left
    webViewBox.addGestureRecognizer(leftSwipe)

    //To go back:
    let rightSwipe = UISwipeGestureRecognizer(target: webViewBox, action: #selector(webViewBox.goBack))
    rightSwipe.direction = .right
    webViewBox.addGestureRecognizer(rightSwipe)
  

【讨论】:

这有点敏感,用户可能会意外滑动 是的@htafoya,但这些手势现在有点普遍。有人不小心这样做并不容易

以上是关于在 UIWebView 中向后/向前滑动手势?的主要内容,如果未能解决你的问题,请参考以下文章

在 python 列表中向后或向前循环以查找匹配项

如何在 spritekit 中向节点添加滑动手势

如何覆盖 UIWebView 中的滑动手势?

Hammer.js 在 Angular 中向左滑动手势动画

在 Swift 中禁用向后滑动手势

使用向后滑动手势以交互方式取消选择选定单元格