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

6 objective-c uiwebview ios uiswipegesturerecognizer

我的应用程序中有一个WebView.

因为它是一个标签式应用程序,所以我无法在网站上添加用于返回/转发的按钮.

我想通过滑动返回/前进.右侧滑动从左侧/边缘返回......就像在iOS浏览器中一样.

我该怎么做?我想我应该使用"Screen Edge Pan Gesture Recognizer",对吗?

小智 13

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()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


OD *_*ons 5

在Swift 3和Swift 4中回答

如果有人仍然有问题。这为我工作:

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

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

    self.didFinish()

    webView.allowsBackForwardNavigationGestures = true

}
Run Code Online (Sandbox Code Playgroud)

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

webView.allowsBackForwardNavigationGestures = true

  • 澄清一下,`WKWebView` 有 `allowsBackForwardNavigationGestures` 属性,而 `UIWebView` 没有。 (2认同)

mKa*_*ane 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");   
} 

}
Run Code Online (Sandbox Code Playgroud)