我在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;
}
答案 0 :(得分:3)
这非常简单。只是逻辑思考。
表格视图只有几个单元格,最多可能是10或20。即使它有很多行,它也只需要几个单元格,因为当单元格从屏幕滚动时,它们会被重新用于正在滚动到屏幕上的行。
好的,所以......
假设此单元格正在重复使用。然后在致电dequeueReusableCellWithIdentifier
后不是零。你到目前为止和我在一起吗?
然后关于if (cell == nil)
的整个部分被跳过,因为该单元格不为零。你明白了吗?
那么现在是什么buttonA
?它没有!为什么?因为跳过了创建按钮并将该按钮分配给buttonA
的代码。
所以,当你最终到达这一行时:
[buttonA setTitle:[salesArray objectAtIndex:indexPath.row] forState:UIControlStateNormal];
...你正在和零谈话,没有任何反应。