在xcode中添加和删除动态生成的按钮

时间:2013-02-07 20:37:40

标签: ios xcode button dynamic gesture

这是一个奇怪的。

我对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 个答案:

答案 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