我在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;
}
}
答案 0 :(得分:0)
调用“cellForRowAtIndexPath”很可能不会为您提供屏幕上当前可见的单元格实例。 UITableView基于单元重用(如果使用正确) - 这意味着,每次调用“cellForRowAtIndexPath”时,表视图将尝试查找未使用的单元格,如果没有,则创建一个新单元格。
在您的情况下,这意味着您执行滑动手势的单元格与处理滑动时调用cellForRowAtIndexPath方法时获得的单元格不同。而是返回当前未使用的单元格类型实例,并在该实例上执行更改。
解决此问题的一种方法是,不是直接在手势处理程序中更改单元格的属性,而是更改用于填充单元格的数据模型,然后调用tableView reloadCellAtIndexPath...
刷新单元格。
答案 1 :(得分:0)
也许您应该将UITableViewCell子类化并将swipeGesture直接添加到单元格中。 只是一个想法。但是没想过。