隐藏单元格中的自定义UITableviewcell更新

时间:2016-07-29 11:43:27

标签: ios objective-c iphone uitableview

我使用了自定义UITableViewCell。我在其中添加了一个Gesture用于滑动选项,我的tableView中有20个单元格。如果我刷我的第一个单元格并滚动意味着我的第11个单元格也更新为我的第一个单元格值。

以下是我的代码snipet。

    - (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    CustomCell *cell = (CustomCell*)
        [tableView dequeueReusableCellWithIdentifier:@"CustomCellId”];
     [cell setRequestCellDelegate:self];
    [cell.swipeLeft addTarget:self action:@selector(swipeLeftAction:)];
    cell.tag = indexPath.row;
    cell.swipeLeft.delegate = self;
    cell.swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
    cell.indexpath = indexPath;
    [cell.swipeRight addTarget:self action:@selector(swipeRightAction:)];
    cell.swipeRight.delegate = self;
    cell.swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
    cell.tableHoldButtn.tag = indexPath.row;

    return cell;
}

请帮助找到解决方案。

4 个答案:

答案 0 :(得分:1)

这种情况正好发生,因为只要您的第一个刷卡单元离开屏幕,它就会被放入队列中以便重复使用。然后,当你的第10个单元格出现在屏幕上时,它不会被创建,而是第一个单元格被重用。并且由于你已经滑过它,它将以与离开屏幕完全相同的状态出列。

您应该跟踪表视图控制器中应更改哪个单元格的更改,并在您的cellForIndexPath数据源方法中恢复该状态。

答案 1 :(得分:0)

我认为最好使用tableView委托方法代替应用手势。你可以用

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

此外,您还可以通过以下方式自定义编辑按钮外观:

-(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath;

答案 2 :(得分:0)

CustomCell *cell = (CustomCell*)
        [tableView dequeueReusableCellWithIdentifier:[NSString stringwithFormat:"%ld",indexPath.row]];

重用标识符更改为indexPath.row

的字符串

我希望我的实验可以帮到你

答案 3 :(得分:0)

注意:不要在其他地方注册单元格,在其他地方删除注册单元格(可能在viewdidLoad中)

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//    CustomCell *cell = (CustomCell*)
//    [tableView dequeueReusableCellWithIdentifier:@"CustomCellId”];
// need not register cell  in other ,like viewdidLoad
    CustomCell* cell = [tableView dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@"%@",indexPath.row]];

     if (!cell) {
         cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:[NSString stringWithFormat:@"%@",indexPath.row]];
         cell.selectionStyle =     UITableViewCellSelectionStyleNone;
     }

     [cell setRequestCellDelegate:self];
     [cell.swipeLeft addTarget:self action:@selector(swipeLeftAction:)];
     cell.tag = indexPath.row;
     cell.swipeLeft.delegate = self;
     cell.swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
     cell.indexpath = indexPath;
     [cell.swipeRight addTarget:self action:@selector(swipeRightAction:)];
     cell.swipeRight.delegate = self;
     cell.swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
     cell.tableHoldButtn.tag = indexPath.row;

     return cell;
}