0

在我的表格视图单元格中,我需要在单个单元格中显示我的数组元素的内容,如果我插入任何新内容,则不会覆盖以前的内容。以前的内容和我的新内容应该按顺序显示。这里是我的代码

- (void)viewDidLoad
{
[super viewDidLoad];


NSArray *arr=[NSArray arrayWithObjects:cnfqty,cnftitle,cnfrate, nil];

//cnfqty,cnftitle,cnfrate are NSString

finarray=[[NSMutableArray alloc]init];
[finarray addObjectsFromArray:arr];
NSLog(@"%@",finarray);


}

- (void)viewDidUnload
{
[super viewDidUnload];

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

// Return the number of sections.
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [finarray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    UILabel *lab=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 40, 20)];
    lab.text=[finarray objectAtIndex:indexPath.row];
    [cell.contentView addSubview:lab];

}
// Configure the cell...

return cell;
}

我的代码面临的问题是每个字符串都显示在每个单元格中,如果我插入任何新字符串,以前的内容就会消失,只显示新内容。

为了清楚地了解这个问题,我正在尝试为在线购物实施“添加到购物车”服务。根据概念,必须从各种产品中添加项目,它会保存产品信息,并且必须在表格视图中显示详细信息.但我不明白..

请指导..提前谢谢..

4

4 回答 4

3
  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

       UITableViewCell *cell = (UITableViewCell*)[self.YourTableName dequeueReusableCellWithIdentifier:nil];        
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
    }
    
    
        return cell; 
    }
    

    使用 ReusablecellIdentifier nil 使其正常工作.....

于 2012-08-13T11:52:03.467 回答
1

不确定您的 cellForRowAtIndexPath 是否正确。看起来您没有检查单元格是否为零。如果你是(不知何故在括号内),那么你似乎只是在 if(cell == nil) 语句中更新 lab.text 。

它可能应该更像以下内容:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *CellIdentifier = @"Cell";
    UILabel *lab; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  

    if(cell == nil){
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];      
        lab=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 40, 20)];
        lab.tag = 1; // Really any arbitraty number
        [cell.contentView addSubview:lab];  
    }else{
        lab = [cell.contentView viewWithTag:1]
    }

    // Configure the cell... 
    lab.text=[finarray objectAtIndex:indexPath.row];      

    return cell; 
}
于 2012-07-25T20:17:00.543 回答
1

你的代码cellForRowAtIndexPath有点不对劲。您应该在初始化之前检查单元格是否为零。好像您从某处复制了括号,但忽略了条件。

除此之外,您没有代码可以更改要重用的单元格的单元格标签。您只需将文本设置在新文本上。一个容易跟踪标签以重复使用它的方法是给它一个标签。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString *CellIdentifier = @"Cell";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if(cell == nil)
  { // set up brand new cell
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
      UILabel *lab=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 40, 20)];
      lab.tag = 150; // some int you can keep track of, possibly make it a define.
      [cell.contentView addSubview:lab];
  }
  // configure cell
  UILabel *cellLabel = (UILabel *)[cell.contentView viewWithTag:150]; // there's that tag again
  cellLabel.text = [finarray objectAtIndex:indexPath.row];
  return cell;
}
于 2012-07-25T20:13:14.790 回答
1

让你的“finarray”在每个对象中存储一个数组(我的意思是你需要一种二维数组)。cellForRowAtIndexPath您将从 中提取数组,并在提取的finarray数组中indexPath.row循环以填充您的内容。finarray 中的每个数组第一次将仅包含 1 个对象。通过更改单元格中的内容,您实际上将在位于已编辑单元格索引处的数组中添加一个对象。然后,通过重新加载数据,表格将显示新添加的数据。确保管理已编辑单元格的行高,因为它们需要增加。

- (void)viewDidLoad
{
[super viewDidLoad];

//bla bla bla whatever you had here

NSMutableArray *arr1=[NSMutableArray arrayWithObjects:cnfqty, nil];
NSMutableArray *arr2=[NSMutableArray arrayWithObjects:cnftitle, nil];
NSMutableArray *arr3=[NSMutableArray arrayWithObjects:cnfrate, nil];

NSMutableArray *arrMain=[NSMutableArray arrayWithObjects:arr1, arr2, arr3, nil];


finarray=[[NSMutableArray alloc]init];
[finarray addObjectsFromArray:arr];

}


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

//bla bla bla the code to initiate the cell

NSArray *tmpArray = [finarray objectAtIndex:indexPath.row];

for(int i = 0; i<tmpArray.count;i++){
  //create the label
  //set the frame, making sure that origin.y is multiplied by "i"
  //set label's text as [tmpArray objectAtIndex:i]
  //add the label to cell
}

return cell;
}
于 2012-07-25T20:15:58.487 回答