在iOS模拟器中检测长按UIButton

时间:2013-12-24 17:24:34

标签: ios objective-c uitableview uibutton uigesturerecognizer

我的自定义UIButton中有UITableViewCell。我正在通过以下代码处理UITableViewCell中该按钮上的一些控制事件。这取自CellForRowAtIndexPath方法。

    cell.gestureButton.tag = indexPath.row ;

    [cell.gestureButton addTarget:self action:@selector(cellTapped:) forControlEvents:UIControlEventTouchUpInside];

    UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
                                          initWithTarget:self action:@selector(cellLongPressed:)];
    lpgr.minimumPressDuration = 2.0; //seconds
    lpgr.delegate = self ;
    [cell.gestureButton addGestureRecognizer:lpgr];

我在iOS 7模拟器上测试它。我的问题是,对于执行UIControlEventTouchUpInside的第一个事件,我可以看到结果,并且我的cellTapped方法被正确调用。

但是在第二种情况下,我在按钮上分配了UILongPressGestureRecognizer,我无法在模拟器中看到结果,并且永远不会调用cellLongPressed:方法。据我所知,我的代码还可以。所以,我想知道,问题出在哪里?我的代码有什么问题,或者Simulator不支持此功能吗?在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我打赌lpgr与另一个手势识别器发生冲突。您是否尝试过实施UILongPressGestureRecognizer的委托方法?您可能需要设置故障依赖性。具体来说,您可能需要在YES中返回gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

答案 1 :(得分:1)

确保您的cellLongPressed声明为以下内容。

- (void)cellLongPressed:(UIGestureRecognizer *)gestureRecognizer {
   NSLog(@"cellLongPressed in action");
}

或者如果声明如下:

- (void)cellLongPressed {
   NSLog(@"cellLongPressed in action");
}

请将您的手势初始化程序更改为以下内容:

UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
                                          initWithTarget:self action:@selector(cellLongPressed)];

请注意cellLongPressed选择器名称末尾没有“”。