0

这是一个奇怪的问题。

我对 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
4

4 回答 4

0

您的代码似乎有 2 个问题。1. 当您单击一次时,您将在 (0,0,150,150) 添加一个按钮,因此添加的任何新按钮都将位于前一个按钮的顶部。也许我看到这个是因为你的代码被删减了,但你可能想对此做点什么。2. 在 UITapgesturerecognizer 中,它将为您提供被点击的视图(id)。您应该在选择器中使用它。喜欢: doubletap.view.tag

于 2013-02-07T21:11:06.543 回答
0

如果您尝试删除被双击的按钮,请尝试此操作。

- (void) handleDoubleTap:(UIGestureRecognizer *) doubletap {
   [doubletap.view removeFromSuperview];
}

UIGestureRecognizer 附加了视图。无需再次检索它。另外,您的问题是您试图从 self 而不是 doubletap 检索视图

于 2013-02-07T21:00:22.267 回答
0
- (void)handleDoubleTap:(UIGestureRecognizer *)doubletap{
  PuckSelected = self.view.tag;
  [[self.btn viewWithTag:PuckSelected] removeFromSuperview];
}

根据上面的代码,被移除的按钮就是与self.view. 但是您没有显示self.views 标记是如何设置的,因此我们不可能知道您的代码为什么或如何选择将被删除的按钮。

无论如何,你可能在这里走错了路。看起来您可能在按钮内嵌套了按钮?这很奇怪。此外,您正在使用带有UIButtons 的手势识别器,它不需要它。他们已经通过目标动作机制对点击和双击之类的东西做出响应。

一般来说,控件(即从 派生的对象UIControl)已经处理了触摸、点击和其他简单的交互。您实际上只会在UIView需要跟踪滑动或捏合等的 s 上使用手势识别器。

于 2013-02-07T21:00:31.187 回答
0

您的 handleDoubleTap 方法没有意义。做这样的事情::

- (void)handleDoubleTap:(UIGestureRecognizer *)doubletap{

    PuckSelected = doubletap.view.tag;
    [[self.view viewWithTag:PuckSelected] removeFromSuperview];
}

它会正常工作

于 2013-02-07T21:01:20.157 回答