通过点击外部来解除UIAlertControllerStyleAlert UIAlertController

时间:2015-04-24 04:00:54

标签: ios objective-c uialertcontroller

众所周知,UIAlertView现已弃用,Apple希望我们使用样式为UIAlertController的新UIAlertControllerStyleAlert。但是,使用UIAlertControllerStyleAlert,您无法通过在警报视图外部点击来触发UIAlertAction样式UIAlertActionStyleCancel

是否有人知道通过点击警报视图来解除警报视图的方法?

干杯

2 个答案:

答案 0 :(得分:2)

您可以为alertViewController添加样式为 UIAlertActionStyleCancel 的单独取消操作,这样当用户点击外部时,您将获得回调。

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Alert Title" message:@"A Message" preferredStyle:UIAlertControllerStyleActionSheet];
[alertController addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
     // Called when user taps outside
 }]];

答案 1 :(得分:1)

试试这段代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self button];

}

- (void) button {
    UIButton * AlertButton = [UIButton buttonWithType:UIButtonTypeSystem];
    [AlertButton setTitle:@"Button" forState:UIControlStateNormal];
    AlertButton.frame = CGRectMake((self.view.frame.size.width/2) - 50 , (self.view.frame.size.height/2) - 25, 100, 50);
    [AlertButton addTarget:self action:@selector(Alert) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:AlertButton];
}

- (void)Alert {
    UIAlertController * alert = [UIAlertController alertControllerWithTitle:@"Alert Title" message:@"Alert Message" preferredStyle:UIAlertControllerStyleAlert];
    [self presentViewController: alert animated: YES completion:^{ alert.view.superview.userInteractionEnabled = YES; [alert.view.superview addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(DismissAlertByTab)]]; }];
}

- (void)DismissAlertByTab
{
    [self dismissViewControllerAnimated: YES completion: nil];
}