0

在应用程序中,我有几个创建并添加到 UITableView 的动态按钮,每个按钮都有一个触摸事件 (UIControlEventTouchUpInside) 和一个长按手势 (UILongPressGestureRecognizer),我想一次执行任何一个操作。因此,如果当用户触摸时,只会调用按钮操作。如果用户长按,则将调用长按事件。

目前,即使我长按按钮,它也总是在调用动作。

我应该怎么处理这个事件?有什么好的建议吗?

4

4 回答 4

2

您可以在按钮操作事件中添加以下代码。我已经为表格视图中的多个复选框完成了此代码。借助此代码,您可以获得 tableview 记录的 IndexPath。我希望它对你有用。

- (IBAction)btnPressed:(UIButton *)sender {

CGPoint touchPoint = [sender convertPoint:CGPointZero toView:self.tblView];
NSIndexPath *indexpath = [self.tblView indexPathForRowAtPoint:touchPoint];
 NSLog(@"%ld",(long)indexpath.row);
}
于 2016-11-14T13:12:13.100 回答
0

为了不触发两者,您应该使用全局变量或标签标记按钮,以便在UIControlEventTouchUpInside您的目标中过滤操作。

因此,让我们假设您在触发时UILongPressGestureRecognizer调用,并且它在您的自定义单元格中初始化。&调用目标longPressUIControlEventTouchUpInsidebtnPressed

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
[self.button addGestureRecognizer:longPress];
[self.button addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];

选择器调用,在您的自定义单元格内:

-(void)longPress:(UIButton*)btn
{
   // Flag the button,
   self.button.tag = 1;

   // Do LongPress stuff.  

}

按钮的目标UIControlEventTouchUpInside

- (void)btnPressed:(id)sender { 

    UIButton *senderButton = sender;

    if(senderButton.tag == 1) {
        // Long press has been executed, set back the flag to 0
        senderButton.tag = 0;
    } else {
        // Long press not executed 
        // Do the TouchUpInside stuff.
    }
}
于 2016-11-14T13:47:47.830 回答
0

在 Tableview 的 cellForRowAtIndex 中使用以下代码:

[cell.btn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];

在 cellForRowAtIndex 之外实现这个方法。

-(void)btnPressed:(UIButton*)btn
{
   //Do whatever
} 
于 2016-11-14T12:35:15.503 回答
-1

长按使用此代码

`UILongPressGestureRecognizer` *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
    [cell.button addGestureRecognizer:longPress];

长按方法是

-(void)longPress:(UIButton*)btn
{
   //Do whatever
} 
于 2016-11-14T12:39:40.437 回答