如何在选择单元格时更改UITableViewCell图像?

时间:2017-03-12 17:19:43

标签: ios objective-c uitableview

问题总结一下 - 当有人点击UITableViewCell时,我试图检查一个盒子,这涉及到更改单元格中的图像。该表设置良好,工作得很好 - 它显示了我想要的信息,并且单元格选择它们应该的样子。但是,当调用方法didSelectRowAtIndexPath时,我无法更改图像。

这是我到目前为止所拥有的。我已经删除了无关的代码(来自其他表格等),但这应该是与之相关的所有内容。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableItem";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

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

    if (tableView == diabetesVisitTable) {
        if (indexPath.section==0) {
            cell.textLabel.text = [_microvascularValues objectAtIndex:indexPath.row];
            cell.imageView.image = [UIImage imageNamed:@"Family Med Unchecked Box.jpg"];
        }

        else if (indexPath.section==1) {
            cell.textLabel.text = [_macrovascularValues objectAtIndex:indexPath.row];
            cell.imageView.image = [UIImage imageNamed:@"Family Med Unchecked Box.jpg"];
        }

        else if (indexPath.section==2) {
            cell.textLabel.text = [_bloodSugarValues objectAtIndex:indexPath.row];
            cell.imageView.image = [UIImage imageNamed:@"Family Med Unchecked Box.jpg"];
        }

        cell.backgroundColor = [UIColor colorWithRed:0.75 green:0.52 blue:0.53 alpha:1.0];
        self.diabetesVisitTable.backgroundColor = [UIColor colorWithRed:0.75 green:0.52 blue:0.53 alpha:1.0];

        return cell;
    }
    else return 0;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *simpleTableIdentifier = @"SimpleTableItem";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    cell.imageView.image = [UIImage imageNamed:@"Family Med Checked Box.jpg"];
}

3 个答案:

答案 0 :(得分:2)

tableView:didSelectRowAtIndexPath:实施中,您要求表格视图以使用dequeueReusableCellWithIdentifier:配置新单元格。您想要获取用于indexPath的实际单元格,以便您可以直接更新它:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.imageView.image = [UIImage imageNamed:@"Family Med Checked Box.jpg"];
}

您还需要以某种方式更新表视图的数据源以记录其中一行被选中的事实,并且如果数据源指示该行,则更新tableView:cellForRowAtIndexPath:以设置已检查的图像被选中。如果不执行这些步骤,则刷新时单元格将显示为未选中状态。

答案 1 :(得分:1)

您正在尝试更新返回void的didSelectRowAtIndexPath函数中的单元格。所以它不会更新tableview。

您应该从diddSelectRowAtIndexPath获取indexpath.row值并将其传递给cellForRowAtIndexPath。如果他们匹配,更新单元格,它将工作。

还要确保添加beginUpdate和endUpdate以反映表值重新加载

答案 2 :(得分:1)

UITableViewDelegate有3种处理单元格突出显示的方法:

- tableView:shouldHighlightRowAtIndexPath:
- tableView:didHighlightRowAtIndexPath:
- tableView:didUnhighlightRowAtIndexPath:

试试这样:

- (BOOL)tableView:(UITableView*)tableView shouldHighlightRowAtIndexPath:(NSIndexPath*)indexPath
{
    return YES;
}

- (void)tableView:(UITableView*)tableView didHighlightRowAtIndexPath:(NSIndexPath*)indexPath
{
    UITableViewCell* cell = (UITableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
    cell.imageView.image = [UIImage imageNamed:@"Highlightimage"];    
}

- (void)tableView:(UITableView*)tableView didUnhighlightRowAtIndexPath:(NSIndexPath*)indexPath
{
    UITableViewCell* cell = (UITableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
    cell.imageView.image = [UIImage imageNamed:@"image"];  
}