使用objective-C突出显示iOS中的长按表视图单元格和取消高亮显示

时间:2015-09-17 05:51:28

标签: ios objective-c uitableview uigesturerecognizer

长按时突出显示表格视图单元格。

我提到了链接

Long press on UITableView

长按工作正常但表视图单元格没有突出显示。所以我将以下行添加到handleLongPress方法

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

长按细胞突出显示后,还应满足以下条件,

  1. 触摸相同的长按表视图单元格应该不会突出显示,这就像第二次触摸表格视图单元格。
  2. 触摸其他表格视图单元格应突出显示多个单元格选择。
  3. 第二次触摸其他表视图时,单元格应该不亮。
  4. 长按应该像触摸桌面视图单元格一样,但它不应该是实际触摸功能。请指导我。

3 个答案:

答案 0 :(得分:0)

尝试:

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

答案 1 :(得分:0)

请使用这种类型的逻辑。 当您长按开始时,在长按结束时将行显示为已选中,您必须取消选择行。

-(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
        }
    }
}

希望这会帮助你............

答案 2 :(得分:0)

所以我假设你所有的条件都只是在你已经长时间按下牢房的情况下。 看起来你可以获得长时间的印刷工作。所以现在

  1. 在你的班级中声明一个BOOL。 BOOL是Higlighted;
  2. 在长按活动中添加

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