0

我在 UITableView 上使用滑动手势。我试图在向左滑动时对 TableViewCell 执行操作。我注意到正确的单元格被刷了,但由于某种原因,它似乎激活了一个随机的其他单元格。

我怀疑它与指针有关?我对内存指针不是很好,所以任何帮助都会很棒。处理滑动的代码是:

- (void)handleSwipeLeft:(UISwipeGestureRecognizer *)gestureRecognizer
{
    // Get location of the swipe
    CGPoint location = [gestureRecognizer locationInView:self.requestTableView];

    // Get the corresponding index path within the table view
    NSIndexPath *indexPath = [self.requestTableView indexPathForRowAtPoint:location];

    // Check if index path is valid
    if(indexPath)
    {
        //Get the cell out of the table view
        requestCell *cell = (requestCell *)[self.requestTableView cellForRowAtIndexPath:indexPath];

        NSLog(@"%@", [cell.IDLabel text]);


        cell.sendingImage.hidden = false;
        cell.activityIndicator.hidden = false;
        cell.requestorLabel.hidden = true;
        cell.dueDateLabel.hidden = true;
        cell.IDLabel.hidden = true;
        cell.priorityImage.hidden = true;     
    }
}
4

2 回答 2

0

调用“cellForRowAtIndexPath”很可能不会为您提供当前在屏幕上可见的单元格实例。UITableView(如果正确使用)基于单元重用 - 这意味着,每次调用“cellForRowAtIndexPath”时,表格视图都会尝试查找未使用的单元格,如果没有,则创建一个新单元格。在您的情况下,这意味着您执行滑动手势的单元格与处理滑动时调用 cellForRowAtIndexPath 方法时获得的单元格不同。相反,会返回一个当前未使用的单元类型实例,然后您对该实例执行更改。解决此问题的一种方法是,不要直接在手势处理程序中更改单元格的属性,tableView reloadCellAtIndexPath...

于 2012-08-22T21:17:49.863 回答
0

也许你应该继承 UITableViewCell 并将 swipeGesture 直接添加到单元格中。只是一个想法。不过还没想好。

于 2012-08-22T21:41:56.533 回答