我想在我的按钮上实现长按,然后在按下按钮的顶部会出现一个十字按钮,从滚动视图中删除该按钮,该按钮将添加到表格视图中。
我在网上搜索并得到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设备或模拟器中删除应用程序时那样执行功能。
答案 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
}