UITableviewcell内容更新反映

时间:2016-05-02 09:22:33

标签: ios objective-c uitableview uibutton

我已在UIButtons的每一行添加了三个UITableViewCell

当我选择UIButton时,它会将颜色更改为黑色。问题是当我向下滚动表格时,那些颜色变化受到了表格中其他单元格按钮的影响。

这个链接也解释了同样的问题 - > UITableviewcell content updating reflects to other cell

我在iOS中找不到这个问题的任何答案。

这是我的cellForRowAtIndexPath

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"custCell"];

    UIButton *btn1=[cell viewWithTag:101];
    btn1.imageView.contentMode = UIViewContentModeScaleAspectFit;
    [btn1 addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
    btn1.backgroundColor=[UIColor clearColor];
    [btn1 setTag:(indexPath.row*3)+1];

    UIButton *btn2=[cell viewWithTag:102];
    btn2.imageView.contentMode = UIViewContentModeScaleAspectFit;
    [btn2 addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
    btn2.backgroundColor=[UIColor clearColor];
    [btn2 setTag:(indexPath.row*3)+2];

    UIButton *btn3=[cell viewWithTag:103];
    btn3.imageView.contentMode = UIViewContentModeScaleAspectFit;
    [btn3 addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
    btn3.backgroundColor=[UIColor clearColor];
    [btn3 setTag:(indexPath.row*3)+3];
rerutn cell;

这是我的按钮动作方法

- (IBAction)btnClicked:(id)sender
{
    UIButton *button=(UIButton *)sender;
    NSLog(@"tag %ld",(long)button.tag);
    if(button.backgroundColor==[UIColor blackColor]){
        button.backgroundColor=[UIColor clearColor];

    }
    else if(button.backgroundColor==[UIColor clearColor]){
        button.backgroundColor=[UIColor blackColor];
    }
}

在这段代码中没什么特别的。我怎样才能以编程方式解决这个问题..谢谢..!

4 个答案:

答案 0 :(得分:1)

替换

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"custCell"];

使用

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"custCell" forIndexPath:indexPath];

        if (cell == nil){

            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"custCell"];
        }

希望它会有所帮助:)

答案 1 :(得分:1)

制作UITableViewCell并添加UIButton并用故事板标记它们。

@interface TblCellCategoryCell:UITableViewCell

@property (weak, nonatomic) IBOutlet UIButton *btn1;
@property (weak, nonatomic) IBOutlet UIButton *btn2;
@property (weak, nonatomic) IBOutlet UIButton *btn3;

@end

答案 2 :(得分:0)

这是因为UITableView重用了单元格而不是创建新单元格。因此,假设您使用索引2更改单元格的颜色,因此每当UITableView将重用该单元格时,它将显示先前创建的具有更改颜色按钮的单元格。

针对您的具体问题,您正在重置按钮的标记,以便下次尝试从viewWithTag获取按钮时,它将不会返回任何按钮或将返回错误的按钮。

答案 3 :(得分:0)

在cellForRowatIndexPth而不是此行

  

btn1.backgroundColor = [UIColor clearColor];

使用以下代码

if (btn1.isSelected) {
    btn1.backgroundColor=[UIColor clearColor];
}
else{
    btn1.backgroundColor=[UIColor blackColor];
}

在IBAction中使用

 UIButton *button=(UIButton *)sender;
 if(button.backgroundColor==[UIColor blackColor]){
    button.backgroundColor=[UIColor clearColor];
    [button setSelected:YES];
}
else{
    button.backgroundColor=[UIColor blackColor];
    [button setSelected:NO];
}