iOS-在表格中显示数组值时出错
Posted
技术标签:
【中文标题】iOS-在表格中显示数组值时出错【英文标题】:iOS- Error in displaying the array values in a table 【发布时间】:2013-12-30 07:17:29 【问题描述】:在我的应用程序中,我创建了一个名为“array”的可变数组。
array=[[NSMutableArray alloc]initWithObjects:@"a",@"b",@"c",@"d",@"e", nil];
我的 tableView 只包含一个多节的一行,每个节都有一个 customView 只包含一个标签。 我的自定义视图名称是 ContentOfCell
ContentOfCell * contentOfCell=[[ContentOfCell alloc]initWithFrame:CGRectMake(0, 0, 100, 50)];
[cell.contentView addSubview:contentOfCell];
我已将数组添加到标签中
contentOfCell.label.text=[array objectAtIndex:indexPath.section];
我的问题是它只识别数组中的前 4 个值,并且前 4 个值在部分中重复
我觉得这里出了点问题
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
return [indexPath row]+50;
如果我将 50 更改为 100,如果没有正确插入值,则会发生错误
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
NSString * cellIdentifier=[NSString stringWithFormat:@"MyTableView"];
cell=[myTableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell== nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
ContentOfCell * contentOfCell=[[ContentOfCell alloc]initWithFrame:CGRectMake(0, 0, 100, 50)];
[cell.contentView addSubview:contentOfCell];
contentOfCell.nameField.text=[arr objectAtIndex:indexPath.section];
cell.contentView.backgroundColor=[UIColor whiteColor];
这里的视图只包含 3 行,当我向下滚动时再次启动数组,然后再次打印值
【问题讨论】:
你能显示tableview方法的代码吗? 确保 numberOfSectionsInTableView 将等于数组计数 是的,在 numberOfSection 委托中我已经给出了 return[array count]; 显示你的代码cellForRowAtIndexpath
?我认为,dequeueReusable
中的错误
显示 cellForRowAtIndexpath 的代码
【参考方案1】:
我猜你没有正确重用单元格。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
NSString * cellIdentifier=[NSString stringWithFormat:@"MyTableView"];
cell=[myTableView dequeueReusableCellWithIdentifier:cellIdentifier];
ContentOfCell *contentOfCell;
//Initialization Part. declare objects here
if(cell== nil)
//Creation part. Create your new cell here. Do all UI actions here
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
contentOfCell=[[ContentOfCell alloc]initWithFrame:CGRectMake(0, 0, 100, 50)];
contentOfCell.tag =100;
[cell.contentView addSubview:contentOfCell];
cell.contentView.backgroundColor=[UIColor whiteColor];
else
// Reusable part. Reuse the UI controls here from existing cell
contentOfCell = (ContentOfCell *)[cell.contentView viewWithTag:100];
//Assign all the data here
contentOfCell.nameField.text=[arr objectAtIndex:indexPath.section];
这是 ios Rookies 经常犯的简单错误之一。 请在此处查看 Apple 开发人员文档以了解如何重用 tableview 单元格 https://developer.apple.com/library/ios/documentation/userexperience/conceptual/tableview_iphone/TableViewCells/TableViewCells.html
【讨论】:
你可以看看这个链接吗,我给了cmets ***.com/questions/20880074/… 我想使用坐标从字典中将它们绘制在地图上让我在那个页面上得到答案, k,你能告诉我我在这个表格视图中犯了什么错误 很简单,你没有正确地重复使用单元格。可重用的概念在这里解释有点大,这就是为什么我给你苹果文档的链接。请参考那个或谷歌了解 UItableviewcell 的工作原理。 mobilesce.com/2011/12/27/…【参考方案2】:我用分组表实现了与下面相同的代码。一切都很好。请将您的代码与下面的代码进行比较。
- (void)viewDidLoad
[super viewDidLoad];
arrData=[[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k", nil];
// Do any additional setup after loading the view, typically from a nib.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [arrData count];
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
return 50.0;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *aCell=[tableView dequeueReusableCellWithIdentifier:@"da"];
if(aCell==Nil)
aCell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"da"];
ContentOfCell *ContentOfCellObj=[[ContentOfCell alloc] initWithFrame:CGRectMake(0,0,320,50)];
ContentOfCellObj.tag=101;
[aCell.contentView addSubview:ContentOfCellObj];
ContentOfCell *ContentOfCellObj=(ContentOfCell*)[aCell.contentView viewWithTag:101];
ContentOfCellObj.nameField.text=[NSString stringWithFormat:@"%@",[arrData objectAtIndex:indexPath.section]];
return aCell;
【讨论】:
【参考方案3】:使用这个:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString * cellIdentifier=@"CellIdentifier";//or your custom name
UITableViewCell* cell=[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell== nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
ContentOfCell * contentOfCell=[[ContentOfCell alloc]initWithFrame:CGRectMake(0, 0, 100, 50)];
contentOfCell.tag = 101;
[cell.contentView addSubview:contentOfCell];
cell.contentView.backgroundColor=[UIColor whiteColor];
ContentOfCell * contentOfCell = (ContentOfCell*)[cell.contentView viewWithTag:101];
contentOfCell.nameField.text=[arr objectAtIndex:indexPath.section];
return cell;
【讨论】:
不,同样的事情发生 看一下图像,如果我向下滚动,接下来的行包含值 a,然后是 b,然后是 c。直到节数【参考方案4】:确保设置
myTableView.dataSource = self;
还有这两个委托方法
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return [arrData count];
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return 1;
【讨论】:
【参考方案5】:试试这个代码,它肯定会解决你的问题。
第 1 步。首先声明数组为全局变量
@interface YOUR-CLASS-NAME ()
NSMutableArray *array
第 2 步。现在设置你需要的部分。这意味着您要连续重复表中的数组值多少次。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return 1;
第 3 步。现在设置您需要从数组中显示的行数。这意味着不需要显示数组中的任何值
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [array count];
【讨论】:
如果我得到答案,我会验证它以上是关于iOS-在表格中显示数组值时出错的主要内容,如果未能解决你的问题,请参考以下文章