0

你好朋友我已经创建了自定义表并为表添加了所有需要的委托和数据源然后这很好用但是当我们滚动我的表时内容更改就像这样是代码......

Table_worklist=[[UITableView alloc]initWithFrame:CGRectMake(10,480,750,130)style:UITableViewStylePlain];
Table_worklist.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
Table_worklist.delegate=self;
Table_worklist.dataSource=self;
Table_worklist.layer.borderWidth = 2.0;
Table_worklist.layer.borderColor = [UIColor grayColor].CGColor;
[ScrollView addSubview:Table_worklist];

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 static NSString *MyIdentifier = @"MyIdentifier";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if (cell== nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] ;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

     UITextField  *resultval=[[UITextField alloc]initWithFrame:CGRectMake(510,10,120,30)];
        resultval.tag=1;
        resultval.font = [UIFont boldSystemFontOfSize:12.0];
        //the horizontal alignment of the text
        resultval.textAlignment = NSTextAlignmentCenter;
    resultval.contentVerticalAlignment = UIControlContentHorizontalAlignmentCenter;
        resultval.clearButtonMode = UITextFieldViewModeWhileEditing; // has a clear 'x' button to the right
        resultval.delegate =self;
    if([[NSString stringWithFormat:@"%@",[[TestSample objectAtIndex:indexPath.row]valueForKey:@"ResultType"]]isEqualToString:@"Numerical"])
  {
    imageLayer = field.layer;
    [imageLayer setCornerRadius:02];
    [imageLayer setBorderWidth:1];
    imageLayer.borderColor=[[UIColor lightGrayColor]CGColor];

   }
    else if([[NSString stringWithFormat:@"%@",[[TestSample objectAtIndex:indexPath.row]valueForKey:@"ResultType"]]isEqualToString:@"Words"]||[[NSString stringWithFormat:@"%@",[[TestSample objectAtIndex:indexPath.row]valueForKey:@"ResultType"]]isEqualToString:@"Comment"])
{
    imageLayer = field.layer;
    [imageLayer setCornerRadius:06];
    [imageLayer setBorderWidth:1];
    imageLayer.borderColor=[[UIColor blackColor]CGColor];
   UIButton *CheckMark=[[UIButton alloc]initWithFrame:CGRectMake(540,10,30,30)];
    CheckMark.tag=1;
    [CheckMark setImage:[UIImage imageNamed:@"DownTriangle1"]forState:UIControlStateNormal];

    imageLayer = CheckMark.layer;
    [imageLayer setCornerRadius:02];
    [imageLayer setBorderWidth:1];
    imageLayer.borderColor=[[UIColor blackColor] CGColor];
    [cell.contentView addSubview:CheckMark];

  }

        [cell.contentView addSubview:resultval];

  }

   return cell;
 }

这显示了前 3 或 4 个单元格的正确数据(因为表格高度 130,所以一次只显示 3 个单元格)对于这 3 个单元格,我的表格显示正确的数据...例如

   if([[NSString stringWithFormat:@"%@",[[TestSample objectAtIndex:indexPath.row]valueForKey:@"ResultType"]]isEqualToString:@"Numerical"])
   {     }

然后数据是数字的,如果条件其他条件,则转到其他条件……但是当我们有更多单元格时,例如 7-8 单元格,那么当我们滚动这些单元格时,假设在单元格 4 发生了什么,我的控制器转到其他位置if 条件 forComment 和 word data ......所以最后一个单元格 -8 得到了数字数据,所以控制器进入 if 条件,但是在 if else 条件下创建的复选标记按钮显示在我的 if 条件数据上.. ....所以我不知道当我们滚动如何更改我的条件时发生了什么......实际上,我上次在单元格 4 上创建 else if 条件(创建 uibutton 复选标记)时发生了什么,这些条件适用于单元格-8 ...........但是控制器在单元格 8 的 if 条件下进入正确的位置......但是上次创建了在单元格 8 上生成的复选标记按钮......如何解决这个问题....

4

1 回答 1

1

在您遵循我的答案之前,我想告诉您以下代码对内存管理不利,因为它会为 的每一行创建新单元格UITableView,因此请小心。

但是最好使用,当UITableView行数有限时(可能是 50-100 行),那么下面的代码对您的情况很有帮助,如果它适合您,请使用它。

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

    NSString *CellIdentifier = [NSString stringWithFormat:@"S%1dR%1d",indexPath.section,indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {
        cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

         /// Put your code here
     }

    return cell;
}

如果您的行数有限,那么这是最适合您的代码。

于 2013-08-03T06:47:21.897 回答