模态弹窗,点击黑色半透明区域消失
2014-04-04 15:48
1631 查看
点击黑色半透明区域让模态弹窗消失,很简单,给模态窗口的加一个手势就行了,我的模态窗口是一个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];
至此,结束!
在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];
至此,结束!
相关文章推荐
- 关于模态弹窗点击灰色区域消失
- 模态弹窗(对话框)点击灰色区域消失
- 关于模态弹窗点击灰色区域消失
- PopupWindow(弹窗)点击空白区域和返回键消失
- jquery: 弹窗点击一下窗口外区域,弹窗消失,而点击窗口内部不会消失
- boostrap 弹出模态对话框,点击黑色区域不会关闭
- Model模态框点击其他除了模态框区域不消失
- jQuery点击弹出层,弹出模态框,点击模态框消失
- 设置点击ProgressDialog外的区域对话框不消失
- PopupWindow点击外部区域不能消失的解决办法
- popup window点击窗口外区域不消失的解决方法
- AlertDialog创建的弹窗,点击弹窗外部消失操作
- jQuery点击弹出层,弹出模态框,点击模态框消失
- android:点击popupwindow以外区域 popupwindow自动消失
- android:点击popupwindow以外区域 popupwindow自动消失(转载)
- Js阻止事件冒泡 弹出层后点击body区域层消失
- android alertdialog 点击其他区域消失
- js点击任意区域弹出层消失实现代码
- popwindow点击任意区域 popwindow消失
- android dialog点击其他区域消失