如何处理自定义 Tableview 单元格中的收藏按钮点击 iOS?

How to Handle Favourite button clicks in custom Tableview cells iOS?

我正在开发一个应用程序并且我有一个要求。我必须处理自定义单元格上的收藏夹按钮。我在单元格上创建带有图像的自定义按钮并设置 unselected 类型我默认提供的收藏图像一旦用户单击单元格上的收藏按钮我正在更改按钮图像,如 selected 收藏.我正在使用以下代码

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @“CustomCell”;
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    cell.favButton.tag = indexPath.section;
    [cell.favButton addTarget:self action:@selector(handleFavouriteButton:) forControlEvents:UIControlEventTouchUpInside];
    return cell;
}

按钮操作:

-(void)handleFavouriteButton:(id)sender
{
    UIButton *button = sender;
    NSLog(@"selected favourite button tag %li", (long)button.tag);

    if (button.selected) {
        [button setBackgroundImage:[UIImage imageNamed:@"favourites-normal.png"] forState:UIControlStateNormal];
    }
    else{
       [button setBackgroundImage:[UIImage imageNamed:@"favourites-Selected.png"] forState:UIControlStateNormal];
    }
    button.selected=!button.selected;
}

使用上面的代码我可以将收藏夹按钮从正常更改为 selected 并将 selected 更改为正常但是问题是当我 select 最喜欢的按钮在第一行,它也在改变 6 和 11 Ect.. 行。 谁能建议我这样做的正确方法

提前致谢。

当您重复使用单元格时,按钮的图像没有改变。第一个单元格在第 6 个和第 11 个单元格中重复使用,因此按钮图像保持选中状态。使用这个:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @“CustomCell”;
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    cell.favButton.tag = indexPath.section;
    [cell.favButton setBackgroundImage:[UIImage imageNamed:@"favourites-normal.png"] forState:UIControlStateNormal];
    [cell.favButton addTarget:self action:@selector(handleFavouriteButton:) forControlEvents:UIControlEventTouchUpInside];
    return cell;
}

那个按钮动作和所有东西看起来都很好。您需要将选定的按钮索引作为标记保存到 NSMutableArray 中,如下例所示:

In.h Class:

interface myclass : UIViewController{
}
@property (strong, nonatomic) NSMutableArray *arrcontainstate;

In.m Class:

- (void)viewDidLoad {
    [super viewDidLoad];
    _arrcontainstate=[NSMutableArray array];
}



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @“CustomCell”;
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    cell.favButton.tag = indexPath.row;
            if ( [_arrcontainstate containsObject:indexPath.row]) {
                   [cell.favButton setBackgroundImage:[UIImage imageNamed:@"favourites-Selected.png"] forState:UIControlStateNormal];
            }
            else {
                [cell.favButton setBackgroundImage:[UIImage imageNamed:@"favourites-normal.png"] forState:UIControlStateNormal];
            }

    [cell.favButton addTarget:self action:@selector(handleFavouriteButton:) forControlEvents:UIControlEventTouchUpInside];
    return cell;
}

-(void)handleFavouriteButton:(id)sender
{
 UIButton *button = sender;
 button.selected=!button.selected;
    NSLog(@"selected favourite button tag %li", (long)button.tag);

    if (button.selected) {
         [_arrcontainstate addObject:button.tag];
         [button setBackgroundImage:[UIImage imageNamed:@"favourites-Selected.png"] forState:UIControlStateNormal];
    }
    else
    {
       [_arrcontainstate removeObject:button.tag];
       [button setBackgroundImage:[UIImage imageNamed:@"favourites-normal.png"] forState:UIControlStateNormal];
    }
}