0

我是 ios 世界的新手,我有一些数据要加载到表视图控制器中,并且加载完美.. 现在如果完成新插入,则新数据将从索引 0 开始添加到 NSMutableArray(新数据位于顶部并且旧数据在它们之后)现在在用我称为 [tableview reloadData] 的新数据更新 NSMutableArray 之后。

我的目标是在表格视图控制器(索引 0)的顶部显示新数据,但没有加载任何新数据!为什么 ?

这是我用来加载表格单元格的代码,其中数据是包含我的对象的 NSMutableArray:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
    NSString *identifier = [NSString stringWithFormat:@"cell%d", indexPath.row];

    MyCell *cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:identifier];

    if (cell == nil) {

        cell = [[MyCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier];


        // add description
        UILabel *text = [[UILabel alloc] initWithFrame:CGRectMake(15,25, 260, 50)];
        text.numberOfLines=3;
        text.text= [[data objectAtIndex:indexPath.row] desc];
        text.backgroundColor=[UIColor clearColor];

        text.textAlignment= UITextAlignmentRight;
        text.font = [UIFont fontWithName:@"Helvetica" size:13];
        [cell addSubview:text];
    }

    //use your cell here
    cell.textLabel.textAlignment=UITextAlignmentRight;

    cell.textLabel.numberOfLines =3;

    // cell font
    cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:13.0];
    cell.textLabel.textColor=[UIColor blackColor];

    return cell;
}
4

3 回答 3

1

如果您查看您在第一次创建单元格时仅将值分配给 UILabel 的代码,那么在单元格!= nil 的任何出队方法上,您只需更改单元格中已经存在的标签的字体和颜色你使用 StyleValue1

// add description
    UILabel *text = [[UILabel alloc] initWithFrame:CGRectMake(15,25, 260, 50)];
    text.numberOfLines=3;
    text.text= [[data objectAtIndex:indexPath.row] desc];
    text.backgroundColor=[UIColor clearColor];

    text.textAlignment= UITextAlignmentRight;
    text.font = [UIFont fontWithName:@"Helvetica" size:13];
    [cell addSubview:text];

如果您只使用已经与单元格关联的标签,则不需要这个,否则如果您确实需要这个,那么您应该提供标签标签,以便您可以在显示时再次从单元格中检索它。

此外,您将子视图添加到单元格而不是单元格的内容视图。

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

{ UILabel *文本;NSString *identifier = [NSString stringWithFormat:@"cell%d", indexPath.row];

MyCell *cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:identifier];

if (cell == nil) {

    cell = [[MyCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier];


    // add description
    text = [[UILabel alloc] initWithFrame:CGRectMake(15,25, 260, 50)];
    text.numberOfLines=3;        
    text.backgroundColor=[UIColor clearColor];
    text.tag = 1000;

    text.textAlignment= UITextAlignmentRight;
    text.font = [UIFont fontWithName:@"Helvetica" size:13];
    [cell addSubview:text];
} else {
    text = (UILabel*)[cell viewForTag:1000];
}

// Here you update the value of text
text.text= [[data objectAtIndex:indexPath.row] desc];

//use your cell here
cell.textLabel.textAlignment=UITextAlignmentRight;

cell.textLabel.numberOfLines =3;

// cell font
cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:13.0];
cell.textLabel.textColor=[UIColor blackColor];

return cell;
}
于 2013-09-16T20:29:56.763 回答
0

我认为您有一个误解:表格视图单元格通常是由标识符标识的某种结构(例如,标题和副标题)的对象。因此,在最简单的情况下,表格视图的所有单元格都具有相同的结构,因此具有相同的标识符。原因是表格视图单元格可以重复使用:如果一个单元格滚动出屏幕,则将其放回池中,而当新单元格滚动到屏幕中时,将使用池中的一个单元格显示新数据。在这种情况下,为表的每一行创建一个新的标识符根本没有意义。
您的问题可能是您向表格视图询问具有未知标识符的单元格,您使用动态创建它NSString *identifier = [NSString stringWithFormat:@"cell%d", indexPath.row];
我建议使用单个表格视图单元格类型,由单个标识符标识,并设置其属性cell.textLabel.text因此。

于 2013-09-16T20:30:29.293 回答
0

尝试以下操作:

1.将您的代码更改为以下,它应该可以工作:

将您的文本 UILabel 作为 iVar 移动到 MyCell 中,并将其添加到 cellView 中。只需根据初始化块之外的不同索引单独配置信息。

(将静态样式方法移到初始化阶段本身是一个很好的做法。)

    MyCell *cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:identifier];

    if (cell == nil) {

        cell = [[MyCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier];



        cell.text.numberOfLines=3;
        text.backgroundColor=[UIColor clearColor];

        cell.text.textAlignment= UITextAlignmentRight;
        cell.text.font = [UIFont fontWithName:@"Helvetica" size:13];
       // [cell addSubview:text];
     cell.textLabel.textAlignment=UITextAlignmentRight;

    cell.textLabel.numberOfLines =3;

    // cell font
    cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:13.0];
    cell.textLabel.textColor=[UIColor blackColor];
    }


 cell.text.text= [[data objectAtIndex:indexPath.row] desc];
    //use your cell here
  1. 还要检查您是否正确地从可变数组中删除了以前的项目。
于 2013-09-17T06:46:51.650 回答