在UItableView中移动时,UIButton标题会发生变化

时间:2014-11-19 06:34:05

标签: ios objective-c

我在iOS中退出并处理项目,而下次在UITable中移动时会返回我的UIButton,这是一个数组更改,而我将相同的数组传递给UILabel以及UIButton,但按钮标题无法正常工作。 代码段如下:

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


    static NSString *CellIdentifier = @"Cell1";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    UIImageView *imageV;
    UILabel *labelV;
    UILabel *labelU;
    UIButton *buttonA;

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

        imageV = [[UIImageView alloc]init];
        imageV.tag = 1001;
        imageV.frame = CGRectMake(15, 5,30, 30 );

        [cell.contentView addSubview:imageV];

        labelV = [[UILabel alloc]init];
        labelV.tag = 1051;
        labelV.frame = CGRectMake(120, 5,135, 15 );
        labelV.textColor = [UIColor whiteColor];

        [cell.contentView addSubview:labelV];

        labelU = [[UILabel alloc]init];
        labelU.tag = 1052;
        labelU.frame = CGRectMake(120, 25,135, 15 );
        labelU.textColor = [UIColor whiteColor];

        [cell.contentView addSubview:labelU];

        buttonA = [[UIButton alloc] init];
        buttonA.frame=CGRectMake(250, 10, 50, 25);
        buttonA.backgroundColor=[UIColor darkGrayColor];

        [cell.contentView addSubview:buttonA];
    }

    else
    {
      imageV = (UIImageView*)[cell.contentView viewWithTag:1001];
      labelV = (UILabel*)[cell.contentView viewWithTag:1051];
      labelU = (UILabel*)[cell.contentView viewWithTag:1052];
    }

    imageV.image=[UIImage imageNamed:[imagesArray objectAtIndex:indexPath.row]];

    labelV.text = [salesArray objectAtIndex:indexPath.row];
    labelU.text = [priceArray objectAtIndex:indexPath.row];

    buttonA.tag=indexPath.row;

    [buttonA addTarget:self action:@selector(buttonTapped:)forControlEvents:UIControlEventTouchUpInside];
   // if()
    [buttonA setTitle:[salesArray objectAtIndex:indexPath.row] forState:UIControlStateNormal];

    cell.selectionStyle = UITableViewCellSelectionStyleNone;


    cell.backgroundColor = [UIColor colorWithRed:23.00/255.00 green:65.00/255.00 blue:74.00/255.00 alpha:1.00];

    return cell;


}

1 个答案:

答案 0 :(得分:3)

这非常简单。只是逻辑思考。

表格视图只有几个单元格,最多可能是10或20。即使它有很多,它也只需要几个单元格,因为当单元格从屏幕滚动时,它们会被重新用于正在滚动到屏幕上的行。

好的,所以......

假设此单元格正在重复使用。然后在致电dequeueReusableCellWithIdentifier后不是零。你到目前为止和我在一起吗?

然后关于if (cell == nil)的整个部分被跳过,因为该单元格为零。你明白了吗?

那么现在是什么buttonA?它没有!为什么?因为跳过了创建按钮并将该按钮分配给buttonA的代码。

所以,当你最终到达这一行时:

[buttonA setTitle:[salesArray objectAtIndex:indexPath.row] forState:UIControlStateNormal];

...你正在和零谈话,没有任何反应。