iOS UItableviewCell 自定义选中颜色及默认选中首行

本文介绍了如何在iOS应用中实现UITableViewCell自定义选中颜色,并在数据加载后默认选中首行。通过在`didSelectRowAt`中设置背景颜色,以及在数据刷新后调用`selectRowAtIndexPath`来实现选中效果。

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

需求如标题, 实现方法如下:

didSelectRow中进行如下设置:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.selectedBackgroundView = [[UIView alloc]initWithFrame:cell.bounds];
    cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHexString:@"0095d9"];
   }

  这样我们实现了第一个需求,在点击的时候,会显示自定义的颜色,而不是系统的颜色.


接下来实现第二个需求,在你请求完数据,进行reloadData之后, 添加如下方法:

	   [_mainTableView.mj_header endRefreshing];
           [_mainTableView reloadData];
            //表视图进行了刷新
	    //设置你想选中的某一行,我这里是第一行	
           NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
           //执行此方法,表明表视图要选中这一行
       	   [_mainTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
           //调用此方法,显示我们自定义的选中颜色
           [self tableView:_mainTableView didSelectRowAtIndexPath:indexPath];
            


总结:  以前也做过这个需求,但由于时间比较久,并且之前好像还有bug,所以有重新整理做了一次;

这次实现的方式比较官方,没有自定义视图 ,都是使用系统的方法;

        didSelected方法改变了cell的 selected属性,为YES,在官方文档中: 直接设置这个属性对cell的选中状态是没有用的;  


要默认某一行,直接执行 :

 [self tableView:_mainTableView didSelectRowAtIndexPath:indexPath]

是不起作用的;

要先执行:

   [_mainTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];

再执行选中方法,就可以实现了;
  

但具体的原理,我还不是很明白,仍然需要学习; 请不吝赐教;






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值