iOS UITableView 和 UICollectionView 设置默认选中状态

当进入页面时,需要某一行或单元格默认选中。对于UITableView,需在数据加载完成后,通过`selectRowAtIndexPath:animated:scrollPosition:`选择特定行,并使用`setSelected:animated:`方法设置选中状态。对于UICollectionView,只需在数据加载后调用`selectItemAtIndexPath:`即可实现默认选中状态,不需要`setSelected:animated:`方法。

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

使用场景:进入页面时,就让某一行(单元)处于默认选中状态。
以UITableView 为例:
关键 API:

- (void)selectRowAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;
- 
- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;

// Selects and deselects rows. These methods will not call the delegate methods (-tableView:willSelectRowAtIndexPath: or tableView:didSelectRowAtIndexPath:), nor will it send out a notification.
// 选中或者不选中某一行。都不会回调tableview的代理方法,如:(
-tableView:willSelectRowAtIndexPath:
or tableView:didSelectRowAtIndexPath:),同时也不会发送 (UITableViewSelectionDidChangeNotification)这个通知。
所以,代理不起作用,通知也不起作用。但可以使用 设置选中状态这个方法。
使用方法:
重要:一定要等数据也加载完成之后,再调用!!!
获取到想要显示的cell 的indexPath,然后在初始化好TableView 并切 数据加载完成之后,调用
方法
- (void)selectRowAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;。

但,这个时候的cell 还是不会处于选中状态,还要手动设置下。我用属性设置发现没有效果,然后用set方法发现有效果。
- (void)setSelected:(BOOL)selected animated:(BOOL)animated; // animate between regular and selected state

这个时候选中的indexPath 就是你想要默认选中的了。
eg:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:selectIndex inSection:0];
    [tab selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; //  设置默认选中的行
UITableViewCell *cell = [tab cellForRowAtIndexPath:indexPath];
    [cell setSelected:YES animated:YES];  // 使cell 的 状态设置为选中状态

同理,UICollectionView 的API中也有这样的方法。但跟UITableView 略有不同的是,UICollectionViewCell 没有- (void)setSelected:(BOOL)selected animated:(BOOL)animated; 这个方法,测试发现,不需要这个setSelected:方法就可以使item处于选中状态。只需要在数据加载完成之后调用selectItemAtIndexPath:这个方法就可以了。
API:

- (void)selectItemAtIndexPath:(nullable NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UICollectionViewScrollPosition)scrollPosition;
- (void)deselectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated;
- 

eg:

    [collect selectItemAtIndexPath:[NSIndexPath indexPathForItem:2 inSection:0] animated:YES scrollPosition:UICollectionViewScrollPositionNone];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值