在我的应用程序中,当用户点击按钮时,我将UIView
显示为弹出窗口,问题是当点击应用程序中的某处时,请不要忽略该问题,请告诉我如何解雇UIView
弹出窗口。
以下是用户弹出窗口的代码。
- (void) showPopView
{
self.popview.alpha = 1;
[self.popview setFrame:CGRectMake(15, 100, 300, 300)];
//[self dismissPopoverAnimated:NO];
}
弹出按钮代码。
- (IBAction)click:(id)sender {
[self showPopView1];
}
在viewDidLoad
中,我使用了此代码。
self.popview.alpha = 0;
以上代码我用来显示UIView
作为弹出窗口,请告诉用户在外面点击时如何关闭弹出窗口。
感谢。
答案 0 :(得分:1)
在弹出视图的后台添加自定义按钮(UIButton
)以隐藏弹出窗口。由于是自定义按钮,用户可以看到背景视图。确保按钮占据整个屏幕。此外,当您显示弹出视图显示按钮时,当用户隐藏弹出视图时,也会隐藏按钮,以便用户可以访问所有区域。这是最简单的方法。其他选项包括点击手势或检查触摸,但背景中的自定义按钮可以最大限度地降低风险。
答案 1 :(得分:1)
我要做的是在弹出窗口后面添加一个可触摸的叠加层。
在你的.h
@interface YourController : UIViewController{
UIView *overlay;
}
在您的视图中加载了
overlay = [[UIView alloc] initWithFrame:self.view.frame];
overlay.bakcgroundColor = [UIColor clearColor];
UITapGestureRecognizer *singleFingerTap =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleSingleTap)];
[overlay addGestureRecognizer:singleFingerTap];
然后你的方法看起来像:
- (void) showPopView
{
[self.view addSubview:overlay];
self.popview.alpha = 1;
[self.popview setFrame:CGRectMake(15, 100, 300, 300)];
//[self dismissPopoverAnimated:NO];
}
- (void)handleSingleTap{
[overlay removeFromSuperview];
self.popview.alpha = 0;
[self.popview setFrame:CGRectZero];
}
答案 2 :(得分:0)
我确实使用UIButton创建了一个演示,它正在运行,请查看下面的内容 -
- (void)viewDidLoad
{
[super viewDidLoad];
backgroundButton = [[UIButton alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)];
[backgroundButton addTarget:self action:@selector(tapDetected) forControlEvents:UIControlEventTouchUpInside];
}
-(void)tapDetected
{
[backgroundButton removeFromSuperview];
[tempView removeFromSuperview];
}
-(void)showPopup /* on button click I created popup view as you already had */
{
[self.view addSubview:backgroundButton]; //Adding button to self.view
tempView = [[UIView alloc] initWithFrame:CGRectMake(15, 100, 300, 300)];
[tempView setBackgroundColor:[UIColor redColor]];
[backgroundButton addSubview:tempView]; //Adding popup view to button.
[tempView setAlpha:1];
}