Ios 如何向UIActionSheet添加手势?

Ios 如何向UIActionSheet添加手势?,ios,uiactionsheet,Ios,Uiactionsheet,在iOS8中,我想在UIActionSheet中添加一个手势,以便在点击背景时关闭操作表。但是actionsheet.frame是(0,0,0,0),addGestureRecognizer不工作,addSubview也不工作。我想你可以这样做 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapClicked:)]; [self.actionS

在iOS8中,我想在
UIActionSheet
中添加一个手势,以便在点击背景时关闭操作表。但是actionsheet.frame是(0,0,0,0),addGestureRecognizer不工作,addSubview也不工作。

我想你可以这样做

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapClicked:)];
[self.actionSheet.window addGestureRecognizer:tap];
然后,在检测到警报后,点击alertView的外侧

-(void)tapClicked:(UIGestureRecognizer *)gestureRecognizer {
    CGPoint fr = [gestureRecognizer locationInView:self];
    if (fr.y < 0) { // outside Tap
         [self dismissWithClickedButtonIndex:0 animated:YES]; // alertview dismiss method
    }
 }
-(void)点击:(UIGestureRecognitor*)GestureRecognitor{
CGPoint fr=[手势识别器位置视图:self];
如果(fr.y<0){//外部抽头
[self DismissWith Clicked Button索引:0动画:是];//alertview Dismise方法
}
}

您应该将UIGestureRecognitor添加到背景视图,而不是UIActionSheet本身。我做了一个示例项目,效果很好

#import "ViewController.h"
@interface ViewController () <UIActionSheetDelegate>
// make the UIActionSheet to be a property so that you can track it
@property (nonatomic, strong) UIActionSheet *actionSheet;
@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  _actionSheet = [[UIActionSheet alloc] initWithTitle:@"Action Sheet" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Some button" otherButtonTitles:nil];
  _actionSheet.actionSheetStyle = UIActionSheetStyleAutomatic;

  UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap)];
  // add the gestureRecognizer to the background view
  [self.view addGestureRecognizer:singleTap];
}

- (void)singleTap {
  // check nil & visible
  if (_actionSheet && _actionSheet.isVisible) {
    // dismiss with cancel button
    [_actionSheet dismissWithClickedButtonIndex:0 animated:YES];
  }
}

// I pulled out a UIButton to show the UIActionSheet
- (IBAction)showActionSheet:(UIButton *)sender {
  [_actionSheet showInView:self.view];
}
#导入“ViewController.h”
@界面视图控制器()
//将UIActionSheet设置为属性,以便跟踪它
@属性(非原子,强)UIActionSheet*actionSheet;
@结束
@实现视图控制器
-(无效)viewDidLoad{
[超级视图下载];
_actionSheet=[[UIActionSheet alloc]initWithTitle:@“Action Sheet”委托:自取消按钮:@“Cancel”Destructive按钮:@“某些按钮”其他按钮:nil];
_actionSheet.actionSheetStyle=UIActionSheetStyleAutomatic;
UITapGestureRecognizer*singleTap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(singleTap)];
//将手势识别器添加到背景视图
[self.view addgesturecognizer:singleTap];
}
-(无效)单次点击{
//检查无可见(&V)
如果(_actionSheet&&u actionSheet.isVisible){
//用“取消”按钮取消
[_ActionSheetDismiss with Clicked Button索引:0动画:是];
}
}
//我拿出一个UIButton来显示UIActionSheet
-(iAction)showActionSheet:(UIButton*)发送者{
[u actionSheet showInView:self.view];
}

很抱歉,我没有正确描述我的问题。我将“CancelButtontile”设置为零,这样当我单击背景时它就不会丢失。现在我已经通过将CancelButtontile设置为某个值解决了这个问题,不需要添加任何其他代码。对不起,我没有正确描述我的问题。我将“CancelButtontile”设置为零,这样当我单击背景时它就不会丢失。现在我已经通过将CancelButtontile设置为某事解决了这个问题,不需要添加任何其他代码。无论如何,谢谢你的帮助。