我想在iPhone上点击背景时做点什么。
如何启用背景点击?
我使用此代码在我的应用上添加了示例背景。
- void viewDidLoad{
[super viewDidLoad];
UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"backgroundimage.jpeg"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
如何进行背景攻击?
例如,我想点击背景,会弹出一条消息" 点击背景!" 。
我需要IBAction吗?
需要帮助。
答案 0 :(得分:0)
你可以做的是使用IBAction,这将是一个更简单的代码。
在视图控制器的头文件中,执行以下操作:
- (IBAction)backgroundTap:(id)sender;
在视图控制器的实现文件中,执行以下操作:
- (IBAction)backgroundTap:(id)sender
{
}
在故事板中,假设您已将视图控制器GUI与视图控制器类链接,请单击视图控制器GUI的背景,然后在“实用程序”视图中显示Identity Inspector,该视图应显示在右侧。然后,在自定义类(当前应为空)下,键入UIControl。现在转到连接检查器并将Touch Down链接到后台,选择backgroundTap。现在,backgroundTap方法中的任何内容都将是您选择背景时会发生的事情。
答案 1 :(得分:-1)
UIButton
是最简单的方法。
- (void)backgroundButtonClicked:(id)sender
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:@"Background was tapped!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
[alertView release];
}
- (void)viewDidLoad
{
[super viewDidLoad];
/*
* Your other code here
*/
UIButton *backgroundButton = [UIButton buttonWithType:UIButtonTypeCustom];
backgroundButton.backgroundColor = [UIColor clearColor];
backgroundButton.frame = self.view.bounds;
[backgroundButton addTarget:self action:@selector(backgroundButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:backgroundButton];
[self.view sendSubviewToBack:backgroundButton];
}
顺便说一句,没有必要绘制背景图像,因为[UIImage imageNamed:@"imagename"]
会返回图像。如果您想要展示它,请尝试将代码放入-viewDidLoad
:
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"backgroundimage.jpeg"]];
imageView.frame = self.view.bounds;
[self.view insertSubview:imageView belowSubview:backgroundButton];
[imageView release];
感谢@AlexMDC提醒我UITapGestureRecognizer
。这是UITapGestureRecognizer
版本:
- (void)tapped:(UITapGestureRecognizer *)g
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:@"Background was tapped!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
[alertView release];
}
- (void)viewDidLoad
{
[super viewDidLoad];
/*
* Your other code here
*/
UITapGestureRecognizer*tap = [[UITapGestureRecognizer alloc] init];
[tap addTarget:self action:@selector(tapped:)];
[self.view addGestureRecognizer:tap];
[tap release];
}
两个版本都符合要求。无可否认,UITapGestureRecognizer
更强大,更灵活。但是,这次我更喜欢UIButton
来做这个伎俩。它比手势识别器更轻巧。我不需要关心手势识别器的状态,触摸事件是否被其阻挡或如何实现UIGestureRecognizerDelegate
。
我们希望在控制器视图中添加UIView
或UIView
的子类的情况更可能发生。此时,UITapGestureRecognizer
版本需要排除– gestureRecognizerShouldBegin:
委托方法中的所有非背景区域。
如果检测到双击是新要求,则将UIButton
重构为UITapGestureRecognizer
仍然为时不晚。