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

后端 未结 10 1160
清酒与你
清酒与你 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 01:06

    I think you are looking for this method

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

    EDIT

    you can use this on your action sheet object and it works just fine but you cannot register event outside that sheet like the grayed out part

    may be if you use UITapGestureRecognizer on your view controller than it might do the trick.

    UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(nothing)];
    [actionSheet addGestureRecognizer:recognizer];
    
    0 讨论(0)
  • 2020-12-16 01:06

    Use .cancel UIAlertActionStyle as an option.

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

    You can't do that by tapping outside because action sheet covers whole view some transparent black view with buttons in form of sheet in iphones but in ipad this behavior presents by default .

    so for touching outside you cant call touch methods. so i don't think so you can do in this way and also when apple provide a cancel button in action sheet then why not you do use that button rather than this.

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

    This does not answer the question exactly, but here is what I do to close the picker when clicking on one of its items (this prevents from adding additional "done" button or "outside click" stuff):

    Implement the viewForRow picker's delegate method in which you create a UILabel and return it:

    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
    

    On those custom row labels, add a tap action handler:

    UITapGestureRecognizer *tapAction = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleClick:)];
    [label addGestureRecognizer:tapAction];
    

    In the handleClick callback, dismiss the open sheet (the one that contains the picker view):

    [pickerSheet dismissWithClickedButtonIndex:0 animated:TRUE];
    
    0 讨论(0)
提交回复
热议问题