重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件
2014-07-14 08:57
579 查看
重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件
![](http://images.cnitblog.com/i/607542/201407/131743300821638.gif)
为什么会需要这样子的一种方法来实现隐藏或者显示一个cell中的某些控件呢?
其实,隐藏cell中某些控件可以直接在tableView:cellForRowAtIndexPath:方法中直接实现,我们需要判断外部变量比如bool值来决定是否显示这个控件,但需要额外的代码写在tableView:cellForRowAtIndexPath:方法当中,如果我们把bool值传递给该cell让其自己判断是否显示隐藏这个控件,可读性将会大幅增加:)
效果:
![](http://images.cnitblog.com/i/607542/201407/131749343325424.gif)
源码:
YXCell.h
YXCell.m
RootViewController.m
![](http://images.cnitblog.com/i/607542/201407/140852408343924.png)
![](http://images.cnitblog.com/i/607542/201407/140852472405535.png)
![](http://images.cnitblog.com/i/607542/201407/131743300821638.gif)
为什么会需要这样子的一种方法来实现隐藏或者显示一个cell中的某些控件呢?
其实,隐藏cell中某些控件可以直接在tableView:cellForRowAtIndexPath:方法中直接实现,我们需要判断外部变量比如bool值来决定是否显示这个控件,但需要额外的代码写在tableView:cellForRowAtIndexPath:方法当中,如果我们把bool值传递给该cell让其自己判断是否显示隐藏这个控件,可读性将会大幅增加:)
效果:
![](http://images.cnitblog.com/i/607542/201407/131749343325424.gif)
源码:
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
![](http://images.cnitblog.com/i/607542/201407/140852408343924.png)
![](http://images.cnitblog.com/i/607542/201407/140852472405535.png)
![](http://images.cnitblog.com/i/607542/201407/140856451313357.png)
相关文章推荐
- 2018/01/07JAVA 基础 / 接口与继承:重写【子类继承并覆盖父类的对象方法】、隐藏【子类继承并覆盖父类的类方法】与实现类实现接口方法の区别
- C#实现ComboBox控件显示出多个数据源属性的方法
- 实现repeater控件多列显示 简单方法(用CSS float属性)
- java 子类继承父类成员变量的隐藏、实现方法的重写
- 如何实现:GridView 控件中显示的文本不自动换行,隐藏超出宽度部分wj-wangjun
- javascript控制页面控件隐藏显示的两种方法
- javascript控制页面控件隐藏显示的两种方法
- javascript控制页面控件隐藏显示的两种方法
- javascript控制页面控件隐藏显示的两种方法
- 删除子窗体中的控件中的某些属性时出现"Selection contains a component introduced in an ancestor form which cannot be deleted."错误的解决方法
- javascript控制页面控件隐藏显示的两种方法
- asp.net 包含动态创建控件的容器如果要切换显示/隐藏不要用 Visible 属性
- javascript控制页面控件隐藏显示的两种方法
- javascript控制页面控件隐藏显示的两种方法
- 关于asp.net2.0里的Multiview和View控件的显示与隐藏实现的问题
- javascript控制页面控件隐藏显示的两种方法
- javascript控制页面控件隐藏显示的两种方法
- JS之显示、隐藏控件方法
- javascript控制页面控件隐藏显示的两种方法
- javascript控制页面控件隐藏显示的方法