滚动时自定义UITableviewCell内容刷新

时间:2016-02-20 08:23:44

标签: ios objective-c iphone uitableview

我的自定义tableview单元格内容在滚动后变空。所以请帮助我。

我的自定义单元格有8个按钮和一个标签。首先我只显示有标题和选择的标签我正在扩展单元格并显示所有按钮。所以,当我选择几个按钮并且我滚动时,按钮我选择了刷新或恢复正常状态。这是代码。请帮助我这个

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *simpleTableIdentifier = @"newFilterCell";

    newFilterCell *cell = (newFilterCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"newFilterCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
        [cell.contentView.superview setClipsToBounds:YES];
    }


     cell.QuestionLabel.text=[orderArray objectAtIndex:indexPath.row];

    NSArray * arr = [filterInfo objectForKey:[orderArray objectAtIndex:indexPath.row]];
    int val = 0;
     NSLog(@"%@",cell.subviews);

    NSArray * cellViews = cell.contentView.subviews;
    if (arr.count>0)
    {
        for (int i=1; i<=8; i++) {
            if (i<=arr.count) {
                UIButton * target = (UIButton*)[cell viewWithTag:i];;
                [target setTitle:[arr objectAtIndex:i-1]forState:UIControlStateNormal];

                [target addTarget:self action:@selector(selectButton:) forControlEvents:UIControlEventTouchUpInside];


            }
            else
            {
                [[cell viewWithTag:i] setHidden:YES];
            }

        }

    }

   [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

    return cell;


    }

在选择我的细胞时,我正在扩展并重新加载tableview细胞。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath==_expandIndexPath) {

        _expandIndexPath = nil;
         NSMutableArray *modifiedRows = [NSMutableArray array];
         [tableView reloadRowsAtIndexPaths:modifiedRows withRowAnimation:UITableViewRowAnimationLeft];
    }
    else
    {
        selectedRow=indexPath.row;
        NSMutableArray *modifiedRows = [NSMutableArray array];

        [tableView deselectRowAtIndexPath:indexPath animated:TRUE];
        _expandIndexPath = indexPath;
        [modifiedRows addObject:indexPath];

        [tableView reloadRowsAtIndexPaths:modifiedRows withRowAnimation:UITableViewRowAnimationLeft];


}

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

    NSArray * arr = [filterInfo objectForKey:[orderArray objectAtIndex:indexPath.row]];

    if ([indexPath isEqual:_expandIndexPath])

    {
        if ([[orderArray objectAtIndex:indexPath.row]isEqualToString:@"Height"]||[[orderArray objectAtIndex:indexPath.row]isEqualToString:@"Age"])
        {

            return 275;
        }
    else
    {

        if(arr.count==3)
        return 55*arr.count;
    else
        return 37*arr.count;
    }
    }
    else
    return 70;
}

1 个答案:

答案 0 :(得分:0)

UITableViewCells正在被回收。这就是为什么以你的方式做到这一点不安全的原因。您的数据模型需要记住您的按钮和其他更改的内容。每次创建单元格时都需要应用更改。

您需要检查cellForRowAtIndexPath按下的按钮,然后正确显示视图。

您需要记住使用外部数据源在单元格中发生的事情,以应用您想要的更改。

在你的cellForRowAtIndexPath中应该像是检查一个布尔值,无论你是否展示了一些东西:

if(button_is_pressed_for_row_5 == true){
     button_in_cell.hidden = true;
}else{
     button_in_cell.hidden = true;
}