在表格视图上单击按钮以更改表格视图单元格中的图像

时间:2019-02-17 06:51:07

标签: ios objective-c tableview

我有一个带有一个按钮的表格视图单元格。单击单元格按钮时,该按钮具有一种检查按钮标签是否等于indexPath.row的方法。然后,我试图更改图像。但它没有显示。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"FilterTableViewCell";
    FilterTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.cellBtn.tag = indexPath.row;
    cell.radioImage.tag = indexPath.row;
    [cell.cellBtn addTarget:self action:@selector(ButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
    return cell;
}

-(void)ButtonClicked:(UIButton*)sender
{
     int rowNum = [(UIButton*)sender tag];
        NSIndexPath* indexPath = [NSIndexPath indexPathForRow:_currentSelectedIndex inSection:0];
    FilterTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
    if (sender.tag == rowNum) {
        cell.radioImage.image = [UIImage imageNamed:@"selected.png"];
    } else {
        cell.radioImage.image = [UIImage imageNamed:@"unselected.png"];
    }

}

此处的按钮图像未更改。我需要的是,每当我单击需要更改特定单元格图像的任何单元格时,其他单元格都应显示未选择的图像。而且,无论何时单击任何单元格,其图像都会更改为所选图像。我需要获取特定的单元格值,例如textlabel name,subtextlabel name。

我该如何做到这一点。这是什么问题?

已更新:

    -(void)ButtonClicked:(UIButton*)sender
    {
       int rowNum = [(UIButton*)sender tag];
FilterTableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:rowNum inSection:0]];
 if (sender.tag != _currentSelectedIndex) {
        cell.radioImage.image = [UIImage imageNamed:@"selected.png"];
    } else {
        cell.radioImage.image = [UIImage imageNamed:@"unselected.png"];
    }
}

2 个答案:

答案 0 :(得分:0)

添加tableView的这两个委托:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    FilterTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
    cell.radioImage.image = [UIImage imageNamed:@"unselected.png"];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    FilterTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
    cell.radioImage.image = [UIImage imageNamed:@"selected.png"];
}

,然后将ButtonClicked更改为:

-(void)ButtonClicked:(UIButton*)sender
{
    int rowNum = [(UIButton*)sender tag];
    NSIndexPath* indexPath = [NSIndexPath indexPathForRow:_currentSelectedIndex inSection:0];
    if (sender.tag == rowNum) {
        [_tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
    }    
}

答案 1 :(得分:0)

我阅读了您的代码。我发现您在点击按钮的方法中犯了一个错误。

    -(void)ButtonClicked:(UIButton*)sender
    {
         int rowNum = [(UIButton*)sender tag];
            NSIndexPath* indexPath = [NSIndexPath indexPathForRow:_currentSelectedIndex inSection:0];
        FilterTableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
        if (sender.tag == rowNum) {
    cell.radioImage.image = [UIImage imageNamed:@"selected.png"];
        } else {
            cell.radioImage.image = [UIImage imageNamed:@"unselected.png"];
        }

    }

您放置的如果条件始终返回true,因为首先将发件人的标记存储到rowNum,然后将两者进行比较

条件总是正确的,并且将执行以下代码

    cell.radioImage.image = [UIImage imageNamed:@"selected.png"];