iOS 在 Indexpath 的 TableCell 上添加标签

Posted

技术标签:

【中文标题】iOS 在 Indexpath 的 TableCell 上添加标签【英文标题】:iOS Add Label on TableCell at Indexpath 【发布时间】:2015-05-07 21:50:10 【问题描述】:

每次用户双击我的单元格时,我都会尝试显示一个标签。我可以检测到水龙头,并且可以从中执行代码,但是标签有问题。由于某种原因,标签被添加了两个有时三个单元格,低于应该添加的一个单元格。我需要在被点击的单元格上添加标签,应该不难做到。

这是我的代码,在此先感谢。

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

    static NSString *CellIdentifier = @"cell";

    Cell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    if (nil == cell)
    
        cell = [[Cell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    

    PFObject *tempObject = [_myArray objectAtIndex:indexPath.row];
    NSString *currentUser = [[PFUser currentUser]username];

    //NSLog(@"%@",tempObject);
    NSArray *test = [tempObject valueForKey:@"Like"];
    //NSLog(@"%lu",(unsigned long)test.count);


    NSTimeInterval now = [[[NSDate alloc] init] timeIntervalSince1970];
    if ((now - lastClick < 0.3) & [indexPath isEqual:lastIndexPath]) 

        //cell.test.hidden = NO;
        CGRect frame = CGRectMake(0,0, 80, 40);

        UILabel *label1 = [[UILabel alloc]init];

        label1.frame = frame;

        label1.text = @"first label";
        [cell.contentView addSubview:label1];


        if ([test containsObject:currentUser]) 
            NSLog(@"1");

            [tempObject removeObject:currentUser forKey:@"Like"];
            [tempObject saveInBackground];

        else 
            NSLog(@"2");
            [tempObject addUniqueObject:currentUser forKey:@"Like"];
            [tempObject saveInBackground];
        

    

    lastClick = now;
    lastIndexPath = indexPath;


【问题讨论】:

【参考方案1】:

您不应该在 didSelectRowAtIndexPath 方法中对单元格进行 deque。

Cell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (nil == cell)

    cell = [[Cell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

改为使用-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 检索选定索引路径处的单元格,如下所示。

Cell *cell = [tableView cellForRowAtIndexPath:indexPath];

如果需要,您可以在didSelectRowAtIndexPath 方法的末尾调用下面的方法。

[tableView reloadRowsAtIndexPaths: [NSArray arrayWithObject: indexPath]
     withRowAnimation: UITableViewRowAnimationNone];

【讨论】:

@iKrish 我能否检测到cellForRowAtIndexPath 中的单元格是否被点击? 只需将代码的第一部分替换为代码的第二部分,问题将得到解决。 @iKrish 我刚刚做了,现在一切都好。感谢您的快速回复! 它不会让我太早 :) 出于某种原因,当我点击它时,它还会在另一个单元格上添加标签。 @iKrish 它仍在索引处添加标签,但也在其下方添加了一些标签,而无需点击这些标签。

以上是关于iOS 在 Indexpath 的 TableCell 上添加标签的主要内容,如果未能解决你的问题,请参考以下文章

iOS5 中带有 indexPath 值的问题

iOS 在 Indexpath 的 TableCell 上添加标签

iOS 手势获取cell位置点击cell获取indexpath

我们可以在 ios swift 的 indexpath 的 didSelectRow 中异步调用 api

iOS indexPath 为 nil(自定义附件图片)

Swift iOS - 如何在按下单元格之前从 TableView 的所有 IndexPath 中获取数据