点击选中cell后改变cell的样式

本文介绍了如何在iOS项目中实现点击收货地址cell后动态改变其样式。通过设置一个标志位记录选中cell的indexPath.row,根据标志位在UITableView的reloadData时加载不同样式的cell。同时,利用通知机制在选中cell后更新上一个控制器的页面,传递标志位数值以更新对应模型数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目里有一个需求,选中的收货地址和其他的收货地址样式不同
这里写图片描述

选中之后,要动态的改变cell的样式,并在返回上一个控制器的时候更新显示,
这里写图片描述

上一个控制器需要更改的显示,如下图所示:

这里写图片描述

之前想通过点击cell触发cell的-(void)layoutSubviews函数,进行子控件frame的改变,没被选中的cell,打钩的UIImageView的frame设置为0,被选中的设置为相应的正常尺寸,其他的控件的frame依次进行改变。后来还是觉得直接加载两种cell比较方便。因此绘制了两种不同的cell,一种是被选中的,一种是为被选中的。

设置一个标志位

@property (nonatomic,assign) int indexSlected;

这个标志位记录被选中的cell的indexPath.row,每次被选中之后,就改变标志位的值,并且在UITableView reloadData的时候,加载不同的cell.

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == _indexSlected) {
        GCSlectedAddressTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID2"];
        cell.model = _addressArrs[indexPath.row];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        return cell;

    }else{
        GCAddressTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID1"];
        cell.model = _addressArrs[indexPath.row];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        return cell;
    }
}

选中之后还要更新上一个控制器的页面。我选择使用通知的方式,在点击cell的时候就发出通知,附带上对应的标志位的数值,上一个控制器收到之后,就从模型数组中,加载对应的model。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    _indexSlected = (int)indexPath.row;
    [_mainTableView reloadData];
    NSDictionary *info = @{@"info":[[NSString alloc]initWithFormat:@"%d",_indexSlected]};
    [[NSNotificationCenter defaultCenter]postNotificationName:@"selectAddress" object:nil userInfo:info];
}

上一个控制器接收到通知后:

#pragma mark -接收到消息,更新地址
-(void)renewSelecteAddress:(NSNotification *)notification
{
    NSString *seletedIndexStr = notification.userInfo[@"info"];
    _indexSelectedAddress = seletedIndexStr.intValue;
    [_mainTableView reloadData];
}

注意上一个控制器中也有一个标志位_indexSelectedAddress

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值