iOS - indexPathForRowAtPoint不返回具有不同单元格高度的正确indexPath

Dra*_*nix 2 uitableview ios

我有UITableView包含许多单元格.用户可以通过按下此单元格中的展开按钮来扩展单元格以查看此单元格中的更多内容(只有1个单元格可以在时间扩展):

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(selectedRowIndex == indexPath.row) return 205;
    else return 60;
}
Run Code Online (Sandbox Code Playgroud)

在故事板中,我将UILongPressGesture拖到单元格按钮并将其命名为longPress(单元格是自定义的,其中有2个按钮,1需要识别LongPressGesture,其他扩展单元格高度):

@property (retain, nonatomic) IBOutlet UILongPressGestureRecognizer *longPress;
Run Code Online (Sandbox Code Playgroud)

并在viewDidLoad中:

- (void)viewDidLoad
{      
    [longPress addTarget:self action:@selector(handleLongPress:)];
}
Run Code Online (Sandbox Code Playgroud)

它完美地工作,但是当我使用以下代码识别单元格索引路径时,在展开一个单元格时出错:

- (void)handleLongPress:(UILongPressGestureRecognizer*)sender {         
    // Get index path
    slidePickerPoint = [sender locationInView:self.tableView];
    NSIndexPath *indexPath= [self.tableView indexPathForRowAtPoint:slidePickerPoint]; 
    // It's wrong when 1 cell is expand and the cell's button I hold is below the expand button
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我如何在不同的单元格高度时获得正确的indexPath?
预先感谢

Joe*_*oel 6

一种方法是将UILongPressGestureRecognizer添加到每个UITableViewCell(都使用相同的选择器),然后当调用选择器时,您可以通过sender.view获取单元格.也许不是最有效的内存,但如果单个手势识别器在某些情况下不会返回正确的行,这种方式应该可行.

像这样的东西:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    ...

    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] 
  initWithTarget:self action:@selector(handleLongPress:)];
    [longPress setMinimumPressDuration:2.0];
    [cell addGestureRecognizer:longPress];
    [longPress release];

    return cell;
}
Run Code Online (Sandbox Code Playgroud)

然后

- (void)handleLongPress:(UILongPressGestureRecognizer*)sender {  
    UITableViewCell *selectedCell = sender.view;
}
Run Code Online (Sandbox Code Playgroud)