iOS(UITableView):UITableViewCell显示错误的textLabel文本

时间:2014-08-25 13:48:50

标签: ios objective-c cocoa-touch uitableview

我首先显示一个包含字符串数组内容的表。后来,我使用另一个字符串数组来显示其内容。 我在tableVIew:cellForRowAtIndexPath方法中设置文本如下:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
    if (!cell)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }
    NSString *string;
    if (condition)
    {
         string = array2[indexPath.row];
    }
    else
    {
         string = array1[indexPath.row];
    }

    NSLog(@"text:%@", string); // say, "house"
    cell.textLabel.text = string; //it is set correctly/as expected here, as verified by the log statement, but it shows the wrong text while displaying
    NSLog(@"text:%@", cell.textLabel.text); //same as value of variable string, "house", but it displays some other text, while it displays.

    return cell;
}

我还设置了tableView:numberOfRowsInSection:as:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
     if (condition)
     {
          return [array2 count];
     }
     else
     {
          return [array1 count];
     }

 }

2 个答案:

答案 0 :(得分:1)

您的条件结果在两种方法中有所不同。当tableView:numberOfRowsInSection:为真时,array2您引用condition。当tableView:cellForRowAtIndexPath:为真时,array1您引用condition

为了避免这些错误,我通常会定义一个基于section返回数据数组的方法。这样可以将逻辑定义在类中的一个位置。

- (NSArray *)arrayForSection:(NSInteger)section
{
    if (condition)
    {
         return array1;
    }
    else
    {
         return array2;
    }
    return @[];
}

答案 1 :(得分:0)

刚刚解决了。我的错误是,我在cellWillDisplay方法中设置了textLabel的文本:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
     cell.textLabel.text = array1[indexPath.row];
}