每当tableview滚动时重复数组值

时间:2013-12-30 14:21:28

标签: ios iphone tableview

我正在做一个应用程序。我正在显示10个会话。每个会话包含一个值。我从数组中获取这些值。最初它显示每个屏幕的4个值。每当我滚动tableview我想显示其余会话的剩余值。但它再次显示第一个值。所以请告诉我如何显示每个会话的每个值。

3 个答案:

答案 0 :(得分:2)

关键在你的cellForRowAtIndexPath方法中。无论何时调用它,都必须为要返回的单元格刷新该行的数据(基于IndexPath)。发生的事情是单元格从顶部滚动,你的cellForRowAtIndexPath方法通过重新使用刚刚滚动的单元格来提供一个新单元格,并且它仍然在该单元格中获得旧数据。解决方案是每次调用cellForRowAtIndexPath时刷新单元格中的数据,尤其是在重用单元格时。避免在引用的堆栈溢出文章中接受的答案,因为它没有以批准的方式正确地重复使用单元格(这就是为什么它具有负评级)。

答案 1 :(得分:1)

欧文是对的。所引用的文章具有误导性,因为这些示例仅在创建新单元时填充单元数据,而不是在出列并重新使用单元时填充。尝试让您的代码看起来更像这样:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{   
    UITableViewCell* cell;
    float cellFontSize = 24;
    float cellFontOffset = 1;

    cell = [tableView dequeueReusableCellWithIdentifier:@"wordList"];

    if(nil == cell)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"wordList"];

    cell.textLabel.font = [UIFont fontWithName:@"Saddlebag" size:cellFontSize];
    cell.textLabel.textColor = WW_DARKBLUE;
    cell.textLabel.text = (NSString *)[_gameManager.wordList objectAtIndex:indexPath.row];
    cell.backgroundColor = [SKColor clearColor];
    cell.textLabel.shadowColor = WW_YELLOW;
    cell.textLabel.shadowOffset = CGSizeMake(cellFontOffset, cellFontOffset);
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    return cell;
}

不同之处在于,您不仅要在新属性时设置单元格属性,还要设置出列的可重用单元格的属性。请注意,在条件的两种情况下都设置了值,而不仅仅是在更大的else块中。希望有意义。

答案 2 :(得分:0)

如果您编写代码段,则可以更清楚。根据我的理解,您希望从tableview中删除已使用的会话。如果是这样,您可以从数组中删除该会话或将它们存储到名为usedArray的新数组中,然后重新加载tableView。