这是一个奇怪的。
我对Xcode很新。我一直在尝试创建一个简单的应用程序,当您单击按钮视图时添加新按钮,并在双击时删除它们。
添加按钮是可以的,但删除它们是不可靠的。我认为它与我编写代码的方式有关,因为它似乎只是删除了最近添加的双击按钮,而不是我点击的实际按钮。
我的删节.m代码如下:
- (void)viewDidLoad
{
- (void)handleSingleTap:(UITapGestureRecognizer *)tapper {
//adds the buttons and gives them a unique tag
ButtonCount = ButtonCount+1;
btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0, 0, 150, 150);
btn.userInteractionEnabled = YES;
btn.tag=PuckCount;
//attaches double tap recognizer to button
UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleDoubleTap:)];
[doubleTapGestureRecognizer setNumberOfTapsRequired:2];
[btn addGestureRecognizer:doubleTapGestureRecognizer];
//Add Tap Recognizer to pucks to create new buttons
UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(handleSingleTap:)];
[singleTapGestureRecognizer setNumberOfTapsRequired:1];
[singleTapGestureRecognizer requireGestureRecognizerToFail:doubleTapGestureRecognizer];
[btn addGestureRecognizer:singleTapGestureRecognizer];
UIImage *buttonImage = [UIImage imageNamed:@"puck2.png"];
[btn setImage:buttonImage forState:UIControlStateNormal];
[self.view addSubview:btn];
}
//handles what happens on a double tap - THIS IS WHERE I THINK THE PROBLEM IS.
- (void)handleDoubleTap:(UIGestureRecognizer *)doubletap{
PuckSelected = self.view.tag;
[[self.btn viewWithTag:PuckSelected] removeFromSuperview];
}
@end
答案 0 :(得分:0)
如果您要删除正在双击的按钮,请尝试此操作。
- (void) handleDoubleTap:(UIGestureRecognizer *) doubletap {
[doubletap.view removeFromSuperview];
}
UIGestureRecognizer附加了视图。无需再次检索它。另外你的问题是你试图从self而不是doubletap
中恢复视图答案 1 :(得分:0)
- (void)handleDoubleTap:(UIGestureRecognizer *)doubletap{
PuckSelected = self.view.tag;
[[self.btn viewWithTag:PuckSelected] removeFromSuperview];
}
根据上面的代码,删除了与self.view
具有相同标记的按钮的按钮。但是,您没有显示self.view
标记的设置方式,因此我们无法知道您的代码选择要删除的按钮的原因或方式。
无论如何,你可能会走错路。看起来你可能有按钮嵌套在按钮内?这很奇怪。此外,您正在使用带有UIButton
的手势识别器,而不需要它。他们已经通过target-action mechanism回复了点击和双击等内容。
一般来说,控件(即从UIControl
派生的对象)已经处理了触摸,点击和其他简单的交互。您实际上只在需要跟踪滑动或捏合等的UIView
上使用手势识别器。
答案 2 :(得分:0)
你的handleDoubleTap方法没有意义。 做这样的事情::
- (void)handleDoubleTap:(UIGestureRecognizer *)doubletap{
PuckSelected = doubletap.view.tag;
[[self.view viewWithTag:PuckSelected] removeFromSuperview];
}
它会正常工作
答案 3 :(得分:0)
您的代码似乎有2个问题。
1.当您单击时,您将在(0,0,150,150)处添加一个按钮,因此添加的任何新按钮都将位于上一个按钮的顶部。也许我因为你的删节代码而看到这个,但你可能想要做些什么。
2.在UITapgesturerecognizer中,它将为您提供被点击的视图(id)。您应该在选择器中使用它。喜欢:
doubletap.view.tag
。