实现长按按钮并在该按钮顶部显示删除按钮,如从背景中删除应用程序

时间:2011-10-04 11:14:55

标签: iphone objective-c uibutton uigesturerecognizer

我想在我的按钮上实现长按,然后在按下按钮的顶部会出现一个十字按钮,从滚动视图中删除该按钮,该按钮将添加到表格视图中。

我在网上搜索并得到UILongPressGestureRecognizer来实现。我尝试了但是我的滚动视图中有很多按钮,我在每个按钮上放了UILongPressGestureRecognizer但是如何给出按下的参考按钮到选择器方法,以便我可以在该特定的按下按钮上添加一个十字按钮。

UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(deleteAppFromList:)];
UIButton *btn=(UIButton *)[cell.contentView viewWithTag:101+i];
[btn addGestureRecognizer:longPressGesture];
[longPressGesture release];

请建议我如何实现这一点。我希望像从ios设备或模拟器中删除应用程序时那样执行功能。

3 个答案:

答案 0 :(得分:3)

我刚刚做了类似的事情。我检测到touchDown事件,安排一个定时方法,在1秒后设置一个标志,然后当检测到触摸事件时,它检查标志并调用适当的方法。

[myButton addTarget:self action:@selector(itemTouchDown) forControlEvents:UIControlEventTouchDown];
[myButton addTarget:self action:@selector(itemTouchUpInside) forControlEvents:UIControlEventTouchUpInside];

-(void)itemHoldTimer:(NSTimer *)timer
{
    self.itemHoldTimer = nil;
    didHold = YES;
}

-(void)itemTouchDown{
    didHold = NO;
    self.itemHoldTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(itemHoldTimer:) userInfo:nil repeats:NO]; 
}

-(void)itemTouchUpInside {
    if (didHold) {
        didHold = NO;
        [self itemWasTouchedUpAndDidHold];
    } else {
        didHold = NO;
        [self itemWasTouchedUp];
    }
}

答案 1 :(得分:0)

在您设置为手势识别器目标的处理程序方法中,您将传递对触发的识别器的引用,例如:

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;

识别器具有“视图”属性,该属性是识别器附加到的视图。直接使用它或获取此视图的标记,您可以确定按下了哪个按钮。

UIView *myButton = gestureRecognizer.view;

话虽如此,为每个按钮添加手势识别器似乎是错误的方法。我会创建一个自定义控件并直接处理'touchesBegan'和'touchesEnded'。

答案 2 :(得分:0)

在长按识别器的处理程序方法中,使用view属性及其标记来标识视图。

-(void)handleLongPress:(UILongPressGestureRecognizer*)longPressRecognizer 
{
    //longPressRecognizer.view.tag
}