UITableViewCell需要手动滚动更新

时间:2013-12-03 10:45:09

标签: ios iphone

一切正常但是,它只显示前两行的两个数据,但它实际上有10行数据。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    if(fullData==nil){

        return 2;

    }else{
        return [fulldata count];
    }
}

但是当我向上滚动表格视图时,它会更新tableview单元格,其余的值像所有(10行数据)。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableCell";

    SimpleTableCell *cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {

        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];

        return cell;

    }



    NSDictionary *items=nil;


    NSArray *title;
    NSArray *image;

    for(int i=0;i<[fullData count];i++){

        items=[fullData objectAtIndex:i];

        title=[items objectForKey:@"name"];
        [name addObject:title];

        title = [items objectForKey:@“time”];
        [time addObject:title];

        title = [items objectForKey:@“life_result”];
        [life_result addObject:title];

        image=[items objectForKey:@“achievments”];
        [achievments addObject:image];

    }


    dispatch_async(dispatch_get_main_queue(), ^{    


    cell.nameLabel.text=[name objectAtIndex:indexPath.row];
    cell.segment_name.text=[time objectAtIndex:indexPath.row];
    cell.prepTimeLabel.text=[life_result objectAtIndex:indexPath.row];


    //For Image
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[achievments objectAtIndex:indexPath.row]]];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
        if (data) {

            cell.thumbnailImageView.image = [UIImage imageWithData:data];
        }
    }];

        [cell setNeedsDisplay];
    });

    return cell;
}

我想解决这个问题并希望显示完整的行数据,任何人都可以建议我开展工作的方式。

提前致谢。

2 个答案:

答案 0 :(得分:1)

在分配值之前返回单元格。一旦函数命中return语句,函数就会停止执行。在return cell;条件内移除if

答案 1 :(得分:0)

你必须在这里做很多考虑。

您必须了解,只要任何未显示的单元格变得可见,就会调用UITableView的委托和数据源方法。这意味着,当您的应用程序中的某个时刻 fulldata 将被初始化时,它将返回它的计数。这可能就是为什么所有单元格(而不是2)都会在某个时刻显示出来的原因。

在这些行中设置一些断点,并测试当fulldata不再为零时。

另外,正如kaar3k指出的那样,你正在返回一个单元格,其中没有单元格可以出列(阅读:开头)。 另外,我建议删除GC调度调用,你很可能已经在主线程中了。

在cellForRow中异步设置图像也是一个坏主意......