重写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(, , , )];
[self addSubview:_headView]; // 标签
_name = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];
_name.font = [UIFont fontWithName:@"HelveticaNeue-Thin"
size:.f];
_name.textColor = [UIColor orangeColor];
[self addSubview:_name];
}
return self;
} @synthesize showHeadView = _showHeadView;
- (void)setShowHeadView:(BOOL)showHeadView
{
_showHeadView = showHeadView;
if (_showHeadView == YES)
{
_headView.alpha = ;
}
else
{
_headView.alpha = ;
}
} @synthesize showName = _showName;
- (void)setShowName:(BOOL)showName
{
_showName = showName;
if (_showName == YES)
{
_name.alpha = ;
}
else
{
_name.alpha = ;
}
} @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 ;
} - (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
return NO;
} @end



重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件的更多相关文章
- @Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个 BeanInitializationException 异常。
@Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个 BeanInitializationEx ...
- Spring中使用事务搭建转账环境方法二 相对简便的注解方法 ——配置文件注入对象属性需要setter方法 注解方法,不需要生成setter方法
XML配置文件代码如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- 解决tableView中cell动态加载控件的重用问题
解决tableView中cell动态加载控件的重用问题 tableView的cell,有时候需要在运行时取得对应的数据后才能够动态的创建该cell中的控件并加载到该cell中,此时,你一定会遇到重用问 ...
- C#对Excel中指定一列或一行实现隐藏或显示!
C#对Excel中指定一列或一行实现隐藏或显示!不会,求指导!
- Java中构造方法与setter方法
今天在重温Java的同时,一个不是问题的问题,突然地冒出来,不知道大家是不是和我一样,也有过这个比较尴尬的问题 不啰嗦了,那咱就直接说问题吧~~~ 那么首先我们在Java中都会写构造函数,目的是在 ...
- C# 如何隐藏或显示工作表中的网格线
我们知道Excel中有许多虚线形式的网格线,它们用于区分Excel工作表中的单元格.有了网格线,读者可以轻松地查看和核对工作表中的数据.Excel工作表中,网格线是默认存在的,但我们可以根据自身的需求 ...
- 关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)
一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...
- 【转】关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)
一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...
- 在Android中如何获取视频的第一帧图片并显示在一个ImageView中
String path = Environment.getExternalStorageDirectory().getPath(); MediaMetadataRetriever media = n ...
随机推荐
- 高性能的数据压缩库libzling-20160105
libzling(https://github.com/richox/libzling,求观看[watch],求星[star],求叉[fork])是一款高性能的数据压缩库,参见原贴:http://ww ...
- HUE配置文件hue.ini 的impala模块详解(图文详解)(分HA集群)
不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...
- ruby gems列表
https://github.com/shageman/cobradeps
- 虹软linux错误
- IOS打开pdf文件
下了一个打开pdf的第三方,就是打开之后不能缩放.今天上午修改了下试着可以让它能够缩放,在网上查了下,要实现代理方法,写了下,可调试的时候用两个手指不起作用,以为是写的有问题,最后问了下小伙伴.我也在 ...
- 从零开始学JAVA(07)-使用SpringMVC4写helloworld
一.关于开发环境 Eclipse IDE for Java EE Developers Jdk 1.7 (32位版本) SpringMVC 4.1.5.RELEASE apache-tomcat-7. ...
- 【转载】Vue 2.x 实战之后台管理系统开发(二)
2. 常见需求 01. 父子组件通信 a. 父 -> 子(父组件传递数据给子组件) 使用 props,具体查看文档 - 使用 Prop 传递数据(cn.vuejs.org/v2/guide/co ...
- 【C#高级】泛型(一)
泛型,.net 2.0之后出现,基本只要代码中出现 ‘<>’ 尖括号就可以确定是泛型. 在2.0之前大多是使用Object来代替,因为所有类都是Object的派生类,根据继承的原理Obje ...
- [javaSE] 数据结构(栈)
栈(stack)是一种线性存储结构,有以下特点: 1.栈中数据是按照先进后出的方式进出栈的 2.向栈中添加删除元素时,只能从栈顶进行操作 使用数组实现栈 定义一个类ArrayStack 实现入栈方法p ...
- 2.java设计模式-抽象工厂模式
抽象工厂模式简介: 每一个模式都是针对某一种问题的解决方案.抽象工厂模式与工厂模式最大的区别在于,工厂模式针对的是一个产品等级结构,而抽象工厂模式面对的是多个产品等级结构,即产品族的概念. 这里讲解一 ...