在iOS中使用objective-C高亮长按的表格视图单元格并取消高亮



长按显示表格视图单元格

我引用了链接

长按UITableView

长按工作正常,但表格视图单元格没有高亮显示。所以我添加了下面一行到handleLongPress方法

[self.myTableView selectRowAtIndexPath:indexPath animated:NO  scrollPosition:UITableViewScrollPositionNone];

长按单元格高亮显示后,还应满足以下条件,

  1. 触摸同一个长按的表格视图单元格应该取消高亮显示,这就像第二次触摸表格视图单元格一样。
  2. 触摸其他表格视图单元格应该像多个单元格选择一样突出显示。
  3. 在第二次触摸其他表格视图单元格时应该取消高亮。

长按应该表现得像触摸表格视图单元格,但它不应该是实际的触摸功能。

尝试:

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}

所以我假设所有的条件都是在您已经长按单元格的情况下。看起来你可以做长时间的新闻工作。所以现在

    在类中声明BOOL类型。BOOL isHiglighted;
  1. 在长按事件中添加

    [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;
    
  2. 在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
        }
    }
}

希望这将帮助你 ...........

最新更新