How to make a uiactionsheet dismiss when you tap outside eg above it?

后端 未结 10 1159
清酒与你
清酒与你 2020-12-16 00:48

How do i make a uiactionsheet dismiss when you tap outside eg above it? This is for iPhone. Apparently the ipad does this by default (I may be wrong).

相关标签:
10条回答
  • 2020-12-16 00:55

    No need of any tap gesture. Simply use UIAlertActionStyleCancel action.

    0 讨论(0)
  • 2020-12-16 00:57

    in iOS7 I add dismissWithClickedButtonIndex msg in gestureRecognizerShouldBegin, and it works.

    0 讨论(0)
  • 2020-12-16 01:00

    Ok got a solution. The following applies to a subclass of a UIActionSheet

    // For detecting taps outside of the alert view
    -(void)tapOut:(UIGestureRecognizer *)gestureRecognizer {
        CGPoint p = [gestureRecognizer locationInView:self];
        if (p.y < 0) { // They tapped outside
            [self dismissWithClickedButtonIndex:0 animated:YES];
        }
    }
    
    -(void) showFromTabBar:(UITabBar *)view {
        [super showFromTabBar:view];
    
        // Capture taps outside the bounds of this alert view
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOut:)];
        tap.cancelsTouchesInView = NO; // So that legit taps on the table bubble up to the tableview
        [self.superview addGestureRecognizer:tap];
        [tap release];
    }
    

    The gist of it is to add a gesture recogniser to the action sheet's superview, and test all taps to see if they are above the action sheet.

    0 讨论(0)
  • 2020-12-16 01:02

    it may be useful to you Use:

    - (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated
    

    previous so question

    0 讨论(0)
  • 2020-12-16 01:02

    After setting the cancelButtonIndex property of UIActionSheet with a valid value, tapping outside will dismiss the UIActionSheet. I have tried in iOS 9. However, if this cancelButtonIndex is not set of set to a wrong value (e.g. an index beyond the total button count in the UIActionSheet), nothing will happen when tapping outside.

    0 讨论(0)
  • 2020-12-16 01:02

    Use showFromRect, for example:

    UIView *barButtonView = [barButtonItem valueForKey:@"view"];
    CGRect buttonRect = barButtonView.frame;
    
    [actionSheet showFromRect:buttonRect inView:self.view animated:YES];
    
    0 讨论(0)
提交回复
热议问题