iOS-在表中显示数组值时出错

时间:2013-12-30 07:17:29

标签: ios uitableview uiview nsmutablearray uilabel

在我的应用程序中,我创建了一个名为“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];
 }}

enter image description here enter image description here 这里视图只包含3行,当我向下滚动数组再次启动时,再次打印值

5 个答案:

答案 0 :(得分:2)

我猜你没有正确地重复使用这个细胞。

-(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

答案 1 :(得分: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;
}

答案 2 :(得分:1)

使用此:

-(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;
}

答案 3 :(得分:0)

确保设置

myTableView.dataSource = self;

和这两个委托方法

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
   return [arrData count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{ 
   return 1;
}

答案 4 :(得分:0)

尝试使用此代码,肯定会解决您的问题

第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];
}