在项目中有时候会遇到这样的需求: UIAlertController点击背景回收弹窗,但是因为UIAlertController特殊的复合层次结构,在弹出控制器的时候原控制器无法响应touch事件,所以要通过程序的主窗口来访问到子视图中的响应面板,通过收拾回收弹窗,实现方式有两种可以自定义UIAlertController也可以为UIAlertController写一个Category:实现如下:
//找寻面板
UIView *backView = [[UIApplication sharedApplication].keyWindow.subviews.lastObject subviews][0];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap)];
[backView addGestureRecognizer:tap];
//手势点击事件
-(void)tap
{
[self dismissViewControllerAnimated:YES completion:nil];
}