小故障/ bug与滚动表视图

时间:2014-08-07 07:42:43

标签: ios objective-c uitableview

我的UITableView出现了一个奇怪的故障/错误。一切都很好,但是,当我向下滚动到第二个单元格并回到第一个单元格时,第一个单元格中的标签文本变得与第二个单元格中的相同...我不确定为什么这种情况正在发生,请你好好看看我的代码并帮助我。

代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *CellIdentifer = [NSString stringWithFormat:@"CellIdentifier%i",num];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifer];
    }

    UILabel *titleL = [[UILabel alloc] initWithFrame:CGRectMake(10,10,300,20)];
    titleL.text = myTitle;

    [cell addSubview:titleL];

    return cell;
}
-(void) makeMeADreamer {
    for (int i = 0; i < arr.count; i++) {
        PFQuery *query = [PFQuery queryWithClassName:@"DreamBits"];
        [query whereKey:@"objectId" equalTo:[arr objectAtIndex:i]];

        [query getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {
            if (!object) {
            } else {
                myTitle = [object objectForKey:@"title"];
                num = i;
                [feed beginUpdates];
                [feed reloadRowsAtIndexPaths:myArr withRowAnimation:UITableViewRowAnimationAutomatic];
                [feed endUpdates];
            }
        }];
    }
}

2 个答案:

答案 0 :(得分:0)

尝试替换此代码:

UILabel *titleL = [[UILabel alloc] initWithFrame:CGRectMake(10,10,300,20)];
    titleL.text = myTitle;

    [cell addSubview:titleL];

willDisplayCellForRowAtIndexPath:方法。您在两个单元格中都有相同的标签文本,因为您的第二个单元格已从第一个单元格及其所有子视图中出列。

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString* cellId = @"messagesCell";
     UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellId];
     if (!cell)
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];

     return cell;
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UILabel *titleL = [[UILabel alloc] initWithFrame:CGRectMake(10,10,300,20)];
    titleL.text = myTitle;

    [cell addSubview:titleL];
}

答案 1 :(得分:0)

您以错误的方式创建tableViewCell。每次表视图重新加载时,您都会创建一个标签并将其添加到单元格中。因此,如果向下和向上滚动,您可能会看到许多标签。您应该只创建一个标签并重复使用它。请尝试以下代码

if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifer];
    UILabel *titleL = [[UILabel alloc] initWithFrame:CGRectMake(10,10,300,20)];
    titleL.tag = 1234;
    [cell.contentView addSubview:titleL];
}

UILabel *titleL = (UILable*)[cell.contentView viewWithTag:1234];
titleL.text = myTitle;