我在 UITableView 上有一个 UITapGestureRecognizer。在我调用该方法之前它工作得很好scrollToRowAtIndexPath:atScrollPosition:animated:
。一旦调用它就不起作用。一旦我打电话它也不起作用setContentOffset:
。我实际上必须用手指稍微滚动一下 tableView,然后点击手势才会起作用。设置 contentOffset 或滚动到一行后,如何让它工作?
-(void)viewDidLoad {
// The gesture that doesn't work after 'setContentOffset:'
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(hideShowEditing:)];
[tap setCancelsTouchesInView: YES];
[tap setDelegate: self];
[self setEditTap: tap];
[[self tableView] addGestureRecognizer: tap];
}
-(BOOL)hideShowEditing:(UIGestureRecognizer *)gesture
{
CGPoint location = [gesture locationInView: [self tableView]];
NSIndexPath *ip = [[self tableView] indexPathForRowAtPoint: location];
TaskCell *cell = (TaskCell *)[[self tableView] cellForRowAtIndexPath: ip];
// No cells are expanded, so expand this one
if (editingCellRow == -1 && editingCellSection == -1 && ![gesture isKindOfClass: [UISwipeGestureRecognizer class]]) {
editingCellRow = [ip row]; // if it's a swipe gesture, then it's from the crossOut method
editingCellSection = [ip section];
[[self tableView] beginUpdates];
[[self tableView] endUpdates];
[cell addViewsForEditing];
// Tap gesture only doesn't work if it has to scroll the tableView
[[self tableView] scrollToRowAtIndexPath: ip atScrollPosition: UITableViewScrollPositionNone animated: YES];
return YES;
}
// Another cell is expanded, so unexpand the other cell
// and expand this cell
else if ((editingCellRow != [ip row] || editingCellSection != [ip section]) && ![gesture isKindOfClass: [UISwipeGestureRecognizer class]]) {
// Index path of the expanded cell
NSIndexPath *expandedIp = [NSIndexPath indexPathForRow: editingCellRow inSection: editingCellSection];
TaskCell *expandedCell = (TaskCell *)[[self tableView] cellForRowAtIndexPath: expandedIp];
[expandedCell setAnimateExpansion: YES];
[cell setAnimateExpansion: YES];
// Store the index of the new expanded cell
editingCellRow = [ip row];
editingCellSection = [ip section];
[[self tableView] beginUpdates];
[[self tableView] endUpdates];
[expandedCell removeViewsForEditing];
[[self tableView] scrollToRowAtIndexPath: ip atScrollPosition: UITableViewScrollPositionNone animated: YES];
[cell addViewsForEditing];
return YES;
}
// Tapped the expanded cell, so unexpand it
else if (editingCellRow == [ip row] && editingCellSection == [ip section]) {
[cell setAnimateExpansion: YES];
editingCellRow = -1;
editingCellSection = -1;
[[self tableView] beginUpdates];
[[self tableView] endUpdates];
[cell removeViewsForEditing];
return YES;
}
return NO;
}