zoukankan      html  css  js  c++  java
  • 重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件

    重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件

    为什么会需要这样子的一种方法来实现隐藏或者显示一个cell中的某些控件呢?

    其实,隐藏cell中某些控件可以直接在tableView:cellForRowAtIndexPath:方法中直接实现,我们需要判断外部变量比如bool值来决定是否显示这个控件,但需要额外的代码写在tableView:cellForRowAtIndexPath:方法当中,如果我们把bool值传递给该cell让其自己判断是否显示隐藏这个控件,可读性将会大幅增加:)

    效果:

    源码:

    YXCell.h

    //
    //  YXCell.h
    //  SomeCell
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface YXCell : UITableViewCell
    
    @property (nonatomic, strong) UIImageView   *headView;      // 头像
    @property (nonatomic, assign) BOOL           showHeadView;  // 是否显示头像
    
    @property (nonatomic, strong) UILabel       *name;
    @property (nonatomic, assign) BOOL           showName;
    
    @end

    YXCell.m

    //
    //  YXCell.m
    //  SomeCell
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import "YXCell.h"
    
    @implementation YXCell
    
    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    {
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self)
        {
            // 头像
            _headView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 160, 100)];
            [self addSubview:_headView];
            
            // 标签
            _name      = [[UILabel alloc] initWithFrame:CGRectMake(180, 10, 200, 30)];
            _name.font = [UIFont fontWithName:@"HelveticaNeue-Thin"
                                         size:20.f];
            _name.textColor = [UIColor orangeColor];
            [self addSubview:_name];
        }
        return self;
    }
    
    @synthesize showHeadView = _showHeadView;
    - (void)setShowHeadView:(BOOL)showHeadView
    {
        _showHeadView = showHeadView;
        if (_showHeadView == YES)
        {
            _headView.alpha = 1;
        }
        else
        {
            _headView.alpha = 0;
        }
    }
    
    @synthesize showName = _showName;
    - (void)setShowName:(BOOL)showName
    {
        _showName = showName;
        if (_showName == YES)
        {
            _name.alpha = 1;
        }
        else
        {
            _name.alpha = 0;
        }
    }
    
    @end

    RootViewController.m

    //
    //  RootViewController.m
    //  SomeCell
    //
    //  Copyright (c) 2014年 Y.X. All rights reserved.
    //
    
    #import "RootViewController.h"
    #import "YXCell.h"
    
    @interface RootViewController ()<UITableViewDelegate, UITableViewDataSource>
    
    @property (nonatomic, strong) UITableView   *tableView;
    @property (nonatomic, strong) NSArray       *data;
    
    @end
    
    @implementation RootViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        // 初始化数据源
        _data = @[@{@"showHeadView": [NSNumber numberWithBool:YES],
                    @"showName"    : [NSNumber numberWithBool:YES],
                    @"name"        : @"YouXianMing"},
                  @{@"showHeadView": [NSNumber numberWithBool:YES],
                    @"showName"    : [NSNumber numberWithBool:NO],
                    @"name"        : @"YouTianXing"},
                  @{@"showHeadView": [NSNumber numberWithBool:YES],
                    @"showName"    : [NSNumber numberWithBool:YES],
                    @"name"        : @"YouJin"},
                  @{@"showHeadView": [NSNumber numberWithBool:NO],
                    @"showName"    : [NSNumber numberWithBool:NO],
                    @"name"        : @"YouXia"},
                  @{@"showHeadView": [NSNumber numberWithBool:NO],
                    @"showName"    : [NSNumber numberWithBool:YES],
                    @"name"        : @"YouMeng"},
                  @{@"showHeadView": [NSNumber numberWithBool:YES],
                    @"showName"    : [NSNumber numberWithBool:YES],
                    @"name"        : @"YouZiLing"}];
        
        // 初始化tableView
        _tableView = [[UITableView alloc] initWithFrame:self.view.bounds
                                                  style:UITableViewStylePlain];
        _tableView.delegate   = self;
        _tableView.dataSource = self;
        [self.view addSubview:_tableView];
    }
    
    #pragma mark - 代理
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [_data count];
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *reusedID = @"YXCell";
        YXCell *cell = [tableView dequeueReusableCellWithIdentifier:reusedID];
        if (cell == nil)
        {
            cell = [[YXCell alloc] initWithStyle:UITableViewCellStyleDefault
                                 reuseIdentifier:reusedID];
        }
        
        // 设置头像
        cell.headView.image = [UIImage imageNamed:@"back.jpg"];
        cell.showHeadView   = [_data[indexPath.row][@"showHeadView"] boolValue];
        
        // 设置文本
        cell.name.text = _data[indexPath.row][@"name"];
        cell.showName  = [_data[indexPath.row][@"showName"] boolValue];
        
        return cell;
    }
    
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return 100;
    }
    
    - (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return NO;
    }
    
    @end

  • 相关阅读:
    pku,杨建武:文本挖掘技术
    IT国家重点实验室
    Python3实现简单的http server
    需要保存数据zabbix,不需要保存数据nagios
    Union
    wox 快速搜索程序
    QTTabBar http://qttabbar.wikidot.com/
    git出错调试
    虚拟机无法上网的问题的解决
    通过命令行升级git for windows
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3841357.html
Copyright © 2011-2022 走看看