模态弹窗,点击黑色半透明区域消失

点击黑色半透明区域让模态弹窗消失,很简单,给模态窗口的加一个手势就行了,我的模态窗口是一个viewController,大家可以灵活变通,道理都一样。
在viewDidAppear(viewWillAppear应该也行,我没试,不过不能在viewDidLoad中)中,给window加一个tap手势监听。注意一定是给window加,因为self.view只是模态窗口的那部分,不包括黑色半透明区域。我将recognizerTap定义成全局的了,因为别的方法中还会用到这个变量。
recognizerTap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                            action:@selector(handleTapBehind:)];
    
[recognizerTap setNumberOfTapsRequired:1];
recognizerTap.cancelsTouchesInView = NO;
[self.view.window addGestureRecognizer:recognizerTap];


handleTapBehind方法如下:


- (void)handleTapBehind:(UITapGestureRecognizer *)sender
{
    if (sender.state == UIGestureRecognizerStateEnded)
    {
        CGPoint location = [sender locationInView:nil];
        if(self.navigationController)
        {
            if (![self.view pointInside:[self.view convertPoint:location fromView:self.view.window] withEvent:nil])
            {
                [self dismissViewControllerAnimated:YES completion:nil];
            }
        }
    }
}
这个方法中判断用户点击的点是在self.view中,还是黑色半透明区域,如果是在黑色半透明区域,则消失。
这还没有结束,一定要记得在窗口消失的时候 remove 注册的手势tap 手势监听,在viewWillDisappear方法中,加上:
[self.view.window removeGestureRecognizer:recognizerTap];
至此,结束!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值