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

重写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 = http://www.mamicode.com/@[@{@"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