当我们滚动自定义表格然后在iPhone中更改单元格内容

时间:2013-08-03 06:43:08

标签: iphone ios objective-c

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

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个单元格)这三个单元格我的表格显示正确的数据...例如

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

然后数据是数字如果条件其他明智去其他条件...... 但是当我们有更多的细胞像7-8细胞那么当我们滚动这些细胞所以发生了什么,假设在细胞-4我的控制器去其他如果条件为评论和单词数据.........所以在最后一个细胞-8得到数值数据,所以控制器进入条件但是在if else条件下创建的复选标记按钮显示在我的if条件数据上......所以我不知道发生了什么 当我们滚动如何改变我的状况...... 实际上我最后创建的东西,如果条件(创建uibutton复选标记)在单元格4上应用于单元格8 ...........但是如果条件在单元格8,控制器进入正确的位置.....但最后一次创建了在cell-8上生成的复选标记按钮...... 如何解决这个问题....

1 个答案:

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

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