美文网首页tableview&&iOS学习笔记iOS Developer
iOS自定义UICollectionView和UITableVi

iOS自定义UICollectionView和UITableVi

作者: 小码僧 | 来源:发表于2017-06-16 22:33 被阅读1077次

    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设置套路是一样的(捂脸)。

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

    相关文章

      网友评论

        本文标题:iOS自定义UICollectionView和UITableVi

        本文链接:https://www.haomeiwen.com/subject/jdtvqxtx.html