重写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

 

 

时间: 2024-08-30 04:46:25

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

请问:java中,运用属性文件的方法怎么把mysql加载到memcached中?谢谢!

问题描述 请问:java中,运用属性文件的方法怎么把mysql加载到memcached中?谢谢! 请问:运用属性文件的方法怎么把mysql加载到memcached中?谢谢! 解决方案 http://blog.csdn.net/jiedushi/article/details/6176940

解决tableView中cell动态加载控件的重用问题

解决tableView中cell动态加载控件的重用问题 tableView的cell,有时候需要在运行时取得对应的数据后才能够动态的创建该cell中的控件并加载到该cell中,此时,你一定会遇到重用问题,即使你能做到该cell只根据数值加载了一回控件,你也没法保证不出现重用问题:) 效果(请注意查看,移动下面的格子时,上面出现了重用的问题) 源码: YXCell.h // // YXCell.h // YXTableView // // Copyright (c) 2014年 Y.X. All

.net 实现图片上传的同时在网页中显示,主要是上传控件没有事件,想不出怎么弄,求大手指点

问题描述 .net实现图片上传的同时在网页中显示,主要是上传控件没有事件,想不出来怎么弄,求大手指点 解决方案 解决方案二:如果你是用的服务器控件,那也有事件的啊如果你不是的话,那就要用js来通知更新,可以的方法有:1.后台返回js,更新指定img2.前端定时轮询,超出次数则提示上传失败

Android实现在列表List中显示半透明小窗体效果的控件用法详解_Android

本文实例讲述了Android实现在列表List中显示半透明小窗体效果的控件用法.分享给大家供大家参考,具体如下: Android 在列表List中显示半透明小窗体效果的控件,多的不多直接上代码,要说的都在注释里了: import com.hiapk.market.R; import android.content.Context; import android.graphics.PixelFormat; import android.os.Handler; import android.view

ios-iOS在故事板中画好界面 在APPDelegate里面设置启动这个页面的时候 看不见控件

问题描述 iOS在故事板中画好界面 在APPDelegate里面设置启动这个页面的时候 看不见控件 AppDelegate 代码 (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ViewController *vc = [ViewController new]; vc.dictUserInfo=@{@"User":[[

求解答-android中如何让assets文件夹下的文件显示在Listview中?

问题描述 android中如何让assets文件夹下的文件显示在Listview中? android中如何让assets文件夹下的文件显示在Listview中? 怎么做啊? 求各位大神的源码 谢谢 解决方案 String filenames[] = getResources().getAssets().list(""); 解决方案二: String filenames[] = getResources().getAssets().list(""); 确实能获取到图片

c++-VC++如何向日期时间选取器赋值并显示在日期时间选取器控件中

问题描述 VC++如何向日期时间选取器赋值并显示在日期时间选取器控件中 CString m_strtime1="2014-01-01": int a,b,c; sscanf(m_strtime1.GetBuffer(m_strtime1.GetLength()),"%d-%d-%d",&a,&b,&c); CTime time(a,b,c,0,0,0); dlg.m_RuzhuDate=time; 这样试了可是日期时间选取器控件中没显示201

webgrid-WEB进销存软件中的销售单的产品明细表录入界面,大家用的是什么控件?

问题描述 WEB进销存软件中的销售单的产品明细表录入界面,大家用的是什么控件? 类似管家婆分销ERP V3的开单界面,产品明细可以批量录入,就是一张单据有多条产品明细,后台提交到数据库,界面有计算字段(金额=数量*单价),可以排序,表头可以拖动.各位有知道用什么控件的推荐一下,或者有代码更好,现在做的项目是ASP.NET的.先谢过了! 解决方案 建议你使用成套的控件,这样维持界面一致性和编程模式的统一比较方便,而不是单一的考量. 比如说extjs easyui devexpress等等,这些商业

在遍历文件中写了显示图片的代码,通过控件做显示循环除了问题,麻烦了

问题描述 在遍历文件中写了显示图片的代码,通过控件做显示循环除了问题,麻烦了 我想循环显示图像,在遍历文件中写了显示图片的代码,通过控件做显示循环,调试没问题,运行的时候出现ASSERT(m_hFile != INVALID_HANDLE_VALUE)这一句,设置断点之后发现if(!file.open)这句有问题,有高手能为我解答一下吗,弄了好久没弄出来,麻烦了 void CbianliDoc::OnOpenfile() { // 判断当前图像是否已经被改动 if (IsModified())