长按显示表格视图单元格
我引用了链接
长按UITableView
长按工作正常,但表格视图单元格没有高亮显示。所以我添加了下面一行到handleLongPress方法
[self.myTableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
长按单元格高亮显示后,还应满足以下条件,
- 触摸同一个长按的表格视图单元格应该取消高亮显示,这就像第二次触摸表格视图单元格一样。
- 触摸其他表格视图单元格应该像多个单元格选择一样突出显示。
- 在第二次触摸其他表格视图单元格时应该取消高亮。
长按应该表现得像触摸表格视图单元格,但它不应该是实际的触摸功能。
尝试:
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}
所以我假设所有的条件都是在您已经长按单元格的情况下。看起来你可以做长时间的新闻工作。所以现在
- 在类中声明BOOL类型。BOOL isHiglighted;
在长按事件中添加
[self.myTableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; YourCell *cell = [self.myTableView cellForRowAtIndexPath:indexPath]; //I dont’t know your model for this tableview so I am using cell tag for it //using 1 for selected //2 for unselected // 3 for long pressed one cell.tag = 3; isHiglighted = YES;
在didSelectRowAtIndexPath
中使用以下sudo代码- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if(isHiglighted) { YourCell *cell = [self.myTableView cellForRowAtIndexPath:indexPath]; if(cell.tag==3) { [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; cell.tag = 2; isHiglighted = NO; } else if(cell.tag==1) { [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; cell.tag = 2; } else { [self.myTableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; cell.tag = 1; } } else { // do your stuff ofr single tap if user never long pressed } }
请使用这种逻辑。当开始长按时,显示所选行,而长按结束时必须取消所选行。
-(IBAction)longPressBegan:(UILongPressGestureRecognizer *)recognizer
{
if (recognizer.state == UIGestureRecognizerStateBegan)
{
// Long press detected, Just highlight row
}
else
{
if (recognizer.state == UIGestureRecognizerStateCancelled
|| recognizer.state == UIGestureRecognizerStateFailed
|| recognizer.state == UIGestureRecognizerStateEnded)
{
// Long press ended, deselect row
}
}
}
希望这将帮助你 ...........