每次滚动时,UITableViewCell都会更改其标签值

时间:2019-10-29 11:42:29

标签: ios objective-c iphone uitableview

我有一个reusableCell,它具有一个标签,该标签的值由数组提供。但是标签的值和约束每次都会改变,我的cellForRowAtIndexPath代码看起来像

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     if(indexPath.row % 2 == 0)
    {
        isReceived =TRUE;
    }
     else{
        isReceived = FALSE;
    }
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"id" forIndexPath:indexPath];

    ChatMessageCellTableViewCell *messageCell = (ChatMessageCellTableViewCell*) cell;
    if(messageCell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ChatMessageCellTableViewCell" owner:self options:nil];

        messageCell = [nib objectAtIndex:0];
    }
    else{
        [[messageCell formLabel]setText:messages[indexPath.row]];
        [messageCell setSelectionStyle:UITableViewCellSelectionStyleNone];
    } // this else part is just to make sure that the if has a else part as I saw many people it will work , but in my case it didn't help.

    [[self tableView] setEstimatedRowHeight:50.0];
    [self.tableView setRowHeight:UITableViewAutomaticDimension];

    return messageCell;
}

当我滚动表格时,值正在改变。我尝试了许多不同的方法,但是找不到解决方案,我感到非常困惑,不得不张贴我的问题。

谢谢

3 个答案:

答案 0 :(得分:1)

我知道回答自己的帖子是不好的做法,但是我希望这对某人有帮助

我能够通过更改cellForRowAtIndexPath方法来避免这些更改

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

    NSString *cellIdentifier = (indexPath.row % 2 == 0 ? @"EvenCell" : @"OddCell"); //using different identifier for every cell did the trick I guess
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    ChatMessageCellTableViewCell *messageCell = (ChatMessageCellTableViewCell*) cell; ;
    if (messageCell == nil) {
        messageCell = [[ChatMessageCellTableViewCell alloc] initWithStyle: UITableViewCellStyleDefault
            reuseIdentifier:cellIdentifier];
        if(indexPath.row % 2 == 0)
        {
            isReceived =TRUE;
        }
        else{
            isReceived = FALSE;
        }
    }

        [[messageCell formLabel]setText:messages[indexPath.row]];
        [messageCell setSelectionStyle:UITableViewCellSelectionStyleNone];

    [[self tableView] setEstimatedRowHeight:50.0];
    [self.tableView setRowHeight:UITableViewAutomaticDimension];

    return messageCell;
}

我已评论了所做的更改,以防止滚动时单元格的更改。

感谢所有支持:)

答案 1 :(得分:0)

您的代码逻辑错误,您的代码仅为重复使用的单元分配数据,而不为新创建的单元分配数据。您应该这样将代码移到其他括号中。

ChatMessageCellTableViewCell *messageCell = (ChatMessageCellTableViewCell*) cell;
if(messageCell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ChatMessageCellTableViewCell" owner:self options:nil];

    messageCell = [nib objectAtIndex:0];
}
[[messageCell formLabel]setText:messages[indexPath.row]];
[messageCell setSelectionStyle:UITableViewCellSelectionStyleNone];

答案 2 :(得分:0)

  

我对Obj-C不熟悉,但这可能对您有所帮助。

if youHaveTitleText {
cell.title.text = data.displayText
} else {
cell.title.text = ""
}