UITableView Not Smooth在动态单元格内容期间的滚动会根据设置进行更改

时间:2014-04-18 05:39:47

标签: ios objective-c uitableview

我有一个表视图,行数据显示基于用户设置。 就像我有任务,开始日期,优先级,过程,状态,描述等复选框。

我用户检查任务和描述然后我创建UITableViewCell然后为任务和描述添加标签如果用户选中所有设置,则单元格应该显示所有创建的标签。

我面临的问题是UITableView没有平滑地滚动,当用户在加载设置后第二次滚动它时,它不会重复使用单元格。

以下是代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellMainNibID = @"cellMain";
    NSUInteger count=[arrSettings count];
    TaskItem* item=[self.arrTaskList objectAtIndex:indexPath.row];
    CGFloat y=2;
    UITableViewCell* cell=(UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:cellMainNibID];
    if (_cellMain == nil)
    {

        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellMainNibID];


        for (int i=0; i<count; i++)
        {
            UILabel *lbll=(UILabel*)[cell.contentView viewWithTag:indexPath.row+ i+200];
            NSLog(@" cell label = %@",lbll); //**Return null always**
            UILabel* lbl=[[UILabel alloc]initWithFrame:CGRectMake(10, y, 310, 14)];
            lbl.tag=indexPath.row+ i+200;
            lbl.backgroundColor=[UIColor clearColor];
            lbl.textColor=[UIColor whiteColor];
            lbl.font=[UIFont boldSystemFontOfSize:14];

            [cell.contentView addSubview:lbl];
            lbl=nil;


            NSString* str=[arrSettings objectAtIndex:i];
            CGRect rect;
            if ([str isEqualToString:@"description"])
                rect=CGRectMake(8, y+14, 290, 50);

            else
                rect=CGRectMake(110, y, 290, 14);

            UILabel *lblll=(UILabel*)[cell.contentView viewWithTag:indexPath.row+ i+400];
            NSLog(@" cell label = %@",lblll); //**Return null always**

            UILabel* lbl2=[[UILabel alloc]initWithFrame:rect];
            lbl2.backgroundColor=[UIColor clearColor];
            lbl2.tag=indexPath.row+i+400;
            lbl2.textColor=[UIColor whiteColor];
            lbl2.font=[UIFont systemFontOfSize:14];

            lbl2.numberOfLines=5;
            lbl2.lineBreakMode=NSLineBreakByCharWrapping;
            [cell.contentView addSubview:lbl2];
            y+=lbl2.frame.size.height+1;
            lbl2=nil;

        }
    }

    for (int i=0; i<count; i++)
    {
        UILabel* lbl=(UILabel*)[cell.contentView viewWithTag:indexPath.row+i+200];
        lbl.text=[[[arrSettings objectAtIndex:i]uppercaseString]stringByAppendingString:@":"];

        UILabel* lbl2=(UILabel*)[cell.contentView viewWithTag:indexPath.row+i+400];
        lbl2.text=[item valueForKey:[arrSettings objectAtIndex:i]];
    }






    cell.contentView.backgroundColor=[UIColor clearColor];
    cell.backgroundColor=[UIColor clearColor];
    _cellMain.contentView.backgroundColor=[UIColor clearColor];
    _cellMain.backgroundColor=[UIColor clearColor];

    UIButton *btnCheck=[UIButton buttonWithType:UIButtonTypeCustom];
    btnCheck.tag=indexPath.row+300;
    if ([arrSelectedRow containsObject:[NSNumber numberWithLong:btnCheck.tag-300]])
    {
        [btnCheck setImage:[UIImage imageNamed:@"cb_glossy_on@2x.png"] forState:UIControlStateNormal];
    }
    else
    {
        [btnCheck setImage:[UIImage imageNamed:@"cb_glossy_off@2x.png"] forState:UIControlStateNormal];
    }

    btnCheck.frame=CGRectMake(295, cell.center.y-22, 33, 33);
    [btnCheck addTarget:self action:@selector(checkClicked:) forControlEvents:UIControlEventTouchUpInside];
    cell.accessoryView=btnCheck;
    btnCheck=nil;

    return cell;
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger count=[arrSettings count];
    CGFloat totalHeight=(16*count)+(count*2);
    if (isDesc)
        totalHeight+=60;
    return totalHeight;

}

根据UITableView标签的用户设置,有人可以建议我如何在UITableViewCell中显示动态数据吗?

3 个答案:

答案 0 :(得分:1)

变化:

if (_cellMain == nil)

if (cell == nil)

答案 1 :(得分:1)

在UITableView的cellForRowAtIndex方法中添加以下代码

cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;

答案 2 :(得分:0)

我没有平滑的tableView滚动问题。在我的情况下,原因在于我忘记实现tableView方法tableView: registerNib: forCellReuseIdentifier:(在该项目中我使用.xib来创建单元格)。

[self.tableView registerNib:[UINib nibWithNibName:@"YourTableViewCell" bundle:nil] forCellReuseIdentifier:YourCellReuseIdentifier];