iOS自定义UICollectionView和UITableView单元格选中样式

iOS中,UICollectionView和UITableView已经有系统默认选中颜色设置,但是只有无色,蓝色,灰色,三种颜色设置,如果想要其他的颜色效果,我们可以自由自定义设置。

前言

  • 先观赏一下典型的UITableView控件案例

image.png

  • 典型的UICollectionView控件案例

image.png

1.单元格默认选中效果

  • 系统默认单元格选中样式
//无色
cell.selectionStyle = 
UITableViewCellSelectionStyleNone
;
//蓝色
cell.selectionStyle = 
UITableViewCellSelectionStyleBlue
;
//灰色
cell.selectionStyle = 
UITableViewCellSelectionStyleGray
;
  • 系统默认单元格样式(无选中效果)
cell.selectionStyle = UITableViewCellStyleDefault;
cell.selectionStyle = UITableViewCellSelectionStyleDefault;

示例

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
    if (cell == nil) {
        cell = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyTableViewCell class]) owner:self options:nil] lastObject];
    }
    cell.cellMdl = [self.tableItemArr objectAtIndex:indexPath.row];
    
    //设置选中背景色
    cell.selectionStyle = UITableViewCellStyleDefault;
    cell.selectionStyle = UITableViewCellSelectionStyleDefault;
}

2.单元格自定义选中效果方案(一)

  • 通用方案:

假设你已经正确实现其他代理方法,需要在table或collection的返回cell的代理方法中作如下设置:

cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.frame];
cell.selectedBackgroundView.backgroundColor = [UIColor groupTableViewBackgroundColor];

示例:

  • UICollectionView
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    
//    return [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionCellId" forIndexPath:indexPath];
    
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:collectionCellId forIndexPath:indexPath];
    
    cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.frame];
    cell.selectedBackgroundView.backgroundColor = [UIColor groupTableViewBackgroundColor];
    
////    错误的做法:当次级VC返回时才会调用
//    if (cell.isHighlighted) {
//        cell.backgroundColor = [UIColor groupTableViewBackgroundColor];
//    }else{
//        cell.backgroundColor = [UIColor whiteColor];
//    }
    
    return cell;
}
  • UITableView
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    AssistantTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
    if (cell == nil) {
        cell = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([AssistantTableViewCell class]) owner:self options:nil] lastObject];
    }
    cell.cellMdl = [self.questionItemArr objectAtIndex:indexPath.row];
    
    //设置选中背景色
//    cell.selectionStyle = UITableViewCellStyleDefault;
//    cell.selectionStyle = UITableViewCellSelectionStyleDefault;

    cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.frame];
    cell.selectedBackgroundView.backgroundColor = [UIColor groupTableViewBackgroundColor];
    
    return cell;
}

3.单元格自定义选中效果方案(二)

  • 通用方案:
  • [x] 在自己自定义的cell文件中重写如下方法:

示例:

  • UITableViewCell.m
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{
    [super setHighlighted:highlighted];
    if (highlighted) {
        //选中时
        self.backgroundColor = [UIColor groupTableViewBackgroundColor];
    }else{
        //非选中
        self.backgroundColor = [UIColor whiteColor];
    }
}
  • UICollectionView.m
- (void)setHighlighted:(BOOL)highlighted{
    [super setHighlighted:highlighted];
    if (highlighted) {
        //选中时
        self.backgroundColor = [UIColor groupTableViewBackgroundColor];
    }else{
        //非选中
        self.backgroundColor = [UIColor whiteColor];
    }
}

4.小结

如你所见,不难发现,两个cell设置套路是一样的(捂脸)。

注意的是,方案一和方案二不要重复设置。另外,二者择一的话,推荐方案一。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏進无尽的文章

Swift| 基础语法(五)

总结下 swift下的基础语法,里面涉及到:常量&变量、Swift中的数据类型、逻辑分支、循环、字符串相关、数组和字典、方法的书写调用等内容,考虑到阅读体验分多...

1223
来自专栏Python疯子

Swift - 给TableView添加编辑功能(删除,插入)

1,下面的样例是给表格UITableView添加编辑功能: (1)给表格添加长按功能,长按后表格进入编辑状态 (2)在编辑状态下,第一个分组处于删除状态,第...

3022
来自专栏Python疯子

UITableViewCell自适应网络不规则图片和文字组合的高度

有时我们会需要对cell的图片和文字进行显示并完美自适配其大小,下面用我有限的知识做了个适配,看着好像还能用,哈哈 直接上code 001 在tablev...

2902
来自专栏狂码一生

js 获取屏幕各种宽高的方法(浏览器兼容)

屏幕的有效宽高: window.screen.availHeight window.screen.availWidth 网页可见区域宽:document.bod...

51910
来自专栏hrscy

自定义UITextView

自定义UITextView,带有placeholeder,可以设置placeholeder文字的大小和颜色。

912
来自专栏進无尽的文章

实践-小效果 V

关键效果设置:在改变tableHeaderView的高度后,再手动调用下 Tb 的 setTableHeaderView方法。

1192
来自专栏coding...

Objective-C AVPlayer播放视频的使用与封装大致效果界面搭建Demo地址

看下成员变量就知道我怎么搭建的了,这里我将video播放层的size作为参照量,对所有控件的size按照其video的size宽高进行比例缩放

1384
来自专栏谈补锅

Quartz2D复习(三) --- 涂鸦

和上一篇手势解锁不一样,手势解锁只画了一条路径,从触摸开始--》触摸移动--》触摸结束 ,然后路径完成了,渲染出来就是手势解锁了;

1093
来自专栏我和未来有约会

为UINavigationBar添加自定义背景

@implementation UINavigationBar (UINavigationBarCategory) - (void)drawRect:(CGRe...

1979
来自专栏陈满iOS

iOS·UITableView分割线颜色,隐藏,边距(宽度,起点)等设置

3505

扫码关注云+社区

领取腾讯云代金券