在我的表视图单元格中,我需要在单个单元格中显示数组元素的内容,如果我插入任何新内容,则不会覆盖先前的内容。应按顺序显示之前的内容和我的新内容这是我的代码
- (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;
}
我的代码所面临的问题是每个单元格中都会显示每个字符串,如果我插入任何新字符串,之前的内容就会消失,只显示新内容。
为了清楚了解这个问题,我试图实施"添加到购物车"在线购物服务。根据概念,必须从各种产品中添加项目并保存产品信息,并且必须在表格视图中显示详细信息。但我没有得到它..
请指导......请提前谢谢..
答案 0 :(得分: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以使其正常工作.....
答案 1 :(得分: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;
}
答案 2 :(得分:1)
让你的“finarray”在每个对象中存储一个数组(我的意思是你需要一种二维数组)。在cellForRowAtIndexPath
中,您将finarray
从indexPath.row
中提取数组,并在提取的数组中循环以填充您的内容。 finarray中的每个数组第一次只包含一个对象。通过更改单元格中的内容,您实际上会将另外一个对象添加到位于已编辑单元格索引处的数组中。然后,通过重新加载数据,该表将显示新添加的数据。确保您管理已编辑单元格的行高,因为它们需要增加。
- (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;
}
答案 3 :(得分: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;
}