UILongPressGestureRecognizer不适用于tableview

时间:2012-08-09 06:17:06

标签: objective-c ios xcode uitableview ios5

我在ViewDidLoad方法的桌面视图中添加了一个UILongPressGestureRecognizer。我添加了这个来检测我的代码中的长按表格视图。但它永远不会奏效。在ViewDidLoad中,我添加了以下代码:

UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] 
                                      initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 2.0; //seconds
lpgr.delegate = self;
[self.resultTableView addGestureRecognizer:lpgr];
[lpgr release];

我还添加了这个方法:

-(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer
{
    CGPoint p = [gestureRecognizer locationInView:self.resultTableView];

    NSIndexPath *indexPath = [self.resultTableView indexPathForRowAtPoint:p];
    if (indexPath == nil) {

        NSLog(@"long press on table view but not on a row");
    }
    else {


        NSLog(@"long press on table view at row %d", indexPath.row);
    }


}

请帮我解决这个问题?

3 个答案:

答案 0 :(得分:6)

您的代码正常运行。我认为你必须在.h文件中添加UIGestureRecognizerDelegate委托或如何声明resultTableView我的意思是你以编程方式定义或使用.xib文件。检查一次。

我试过这样的事。

     resultTableView = [[UITableView alloc] init];
     resultTableView =[[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420) style:UITableViewStylePlain];
    resultTableView.rowHeight = 100.0;
    resultTableView.delegate=self;
     resultTableView.dataSource=self;
    [self.view addSubview:resultTableView];

    UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] 
                                          initWithTarget:self action:@selector(handleLongPress:)];
    lpgr.minimumPressDuration = 2.0; //seconds
    lpgr.delegate = self;
    [resultTableView addGestureRecognizer:lpgr];
    [lpgr release];

答案 1 :(得分:3)

看起来您想要将手势添加到单个单元格,但是您要将手势添加到表格中。请尝试将动画添加到UITableViewCell

答案 2 :(得分:0)

如果手势识别器被UITableView panGestureRecognizer阻止,请执行委托以确保两者都能正常工作

 -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}