Gesture recognition with UIWebView

前端 未结 6 1396
孤街浪徒
孤街浪徒 2021-02-04 10:58

I have set up some gesture recognition in an app that I\'m building. One of the gestures is a single finger single tap, which hides the toolbar at the top of the screen. Works g

相关标签:
6条回答
  • 2021-02-04 11:34

    This worked for me.try adding the below line of code

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
    {
    return YES;
    }
    
    0 讨论(0)
  • 2021-02-04 11:36

    I've been looking for the same thing and found this: There is an iOS specific property that disables the callout when you hold your finger on a link. You add this into the styling (CSS) of your urls.

    -webkit-touch-callout: none;
    
    0 讨论(0)
  • 2021-02-04 11:38

    You can use the UIWebViewDelegate protocol's -webView:​shouldStartLoadWithRequest:​navigationType: method.

    If the navigationType is UIWebViewNavigationTypeLinkClicked, you can get the URL for the click by checking [request URL].

    0 讨论(0)
  • 2021-02-04 11:40

    I was having the same problem. This solution worked for me:

    1) make sure to add the protocol to your interface: UIGestureRecognizerDelegate for example:

    @interface ViewController : UIViewController _SlideViewProtocol, UIGestureRecognizerDelegate_
    

    2) add this line of code

        - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    }
    

    3)

    UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(nextSlide)];
            swipeGesture.numberOfTouchesRequired = 1;
            swipeGesture.direction = (UISwipeGestureRecognizerDirectionLeft);
            swipeGesture.cancelsTouchesInView = YES;
            [swipeGesture setDelegate:self];
            [self.view addGestureRecognizer:swipeGesture];
    
    0 讨论(0)
  • 2021-02-04 11:44

    Try wrapping your UIWebView in a UIView container and set your gesture recognizers on the container view. Touch events that are not handled by the UIWebView will be passed up the view hierarchy and be intercepted by your container view, assuming it implements the appropriate handlers (and it is these handlers that should implement the code for hiding the toolbars...).

    0 讨论(0)
  • 2021-02-04 11:53

    OK, so one "hack-ish" workaround is to make the view controller which houses the UIWebView a delegate of the gesture recognizer that you instantiate(UIGestureRecognizerDelegate) I am usually not a fan of solutions like this one, but...

    Assign the gesture recognizer to the view that wraps you web view, and set it's delegate to self.

    then in the delegate method gestureRecognizer:shouldRecieveTouch method, set the state to indicate the there was a tap event,

    Return NO from the delegate method so the event propagates down the responder chain to the UIWebView.

    -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    
        _userTapped = YES;
        [self performSelectorOnMainThread:@selector(hideMenuIfNotLink) afterDelay:??.?];
    //??.?? amount of time to lapse to see if shouldStartLoadWithRequest gets called.
       return NO;
    
    }
    
    -(void)hideMenuIfNotLink{
        if(_userTapped)
             //hideMenu
    }
    

    Now, in your UIWebViewDelegate shouldStartLoadWithRequest (which gets called when a user has in fact clicked a link)

    if(_userTapped){
        _userTapped = NO;
         //possibly code to reshow or verify keep showing menu
    }
    
    0 讨论(0)
提交回复
热议问题