#import <UIKit/UIKit.h>

@interface ZSDHelpCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UIImageView *selectImageView;

@property(nonatomic,copy)NSString *question;

@property(nonatomic,copy)NSString *answer;

//获取展开后的高度

-(CGFloat)getExpandHeight;

@end

#import "ZSDHelpCell.h"

//判断系统版本

#define IOS_VERSION_7_OR_ABOVE (([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)? (YES):(NO))

@interface ZSDHelpCell()

@property (weak, nonatomic) IBOutlet UILabel *questionLabel;

@property (weak, nonatomic) IBOutlet UILabel *answerLabel;

@end

@implementation ZSDHelpCell

- (void)awakeFromNib

{

// Initialization code

}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated

{

[super setSelected:selected animated:animated];

// Configure the view for the selected state

}

-(void)setAnswer:(NSString *)answer

{

if (_answer!=answer)

{

_answer=answer;

_answerLabel.text=_answer;

}

}

-(void)setQuestion:(NSString *)question

{

if (_question!=question)

{

_question=question;

_questionLabel.text=_question;

}

}

-(CGFloat)getExpandHeight

{

//ios8对于systemLayoutSizeFittingSize这个方法有效

return IOS_VERSION_7_OR_ABOVE==1?[self systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height:120;

}

@end

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>

@property (weak, nonatomic) IBOutlet UITableView *myTableView;

@end

#import "ViewController.h"

#import "ZSDHelpCell.h"

#define kDefaultHeight 44.0f

#define kTabeleHeaderHeight 40.0f

//背景色

#define kThemeBackGroundColor [UIColor colorWithRed:0.93 green:0.92 blue:0.92 alpha:1]

#pragma mark - life circle

@interface ViewController ()

{

NSMutableArray *expandArray;//展开的数组

NSMutableDictionary *cellHeightDic;//设置cell高度的字典

NSMutableDictionary *dataSourceDic;//读取plist文件内容

}

@end

@implementation ViewController

- (void)viewDidLoad

{

[super viewDidLoad];

_myTableView.backgroundColor=kThemeBackGroundColor;

[self InitializationArrayOrDictionary];

[self loadContentFromPlist];

// Do any additional setup after loading the view, typically from a nib.

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

#pragma mark - private

-(void)InitializationArrayOrDictionary

{

expandArray=[NSMutableArray array];

cellHeightDic=[NSMutableDictionary dictionary];

dataSourceDic=[NSMutableDictionary dictionary];

}

-(void)loadContentFromPlist

{

NSString *plistPath=[[NSBundle mainBundle] pathForResource:@"Content" ofType:@"plist"];

dataSourceDic=[NSMutableDictionary dictionaryWithContentsOfFile:plistPath];

//NSLog(@"datasourcedic=%@",[dataSourceDic allValues]);

}

#pragma mark - UITableViewDataSource

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return dataSourceDic.count;

}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

NSArray *sectionArray=[dataSourceDic allValues];

NSDictionary *rowDic=[sectionArray objectAtIndex:section];

return rowDic.count;

}

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

if ([expandArray containsObject:indexPath])

{

NSString *key=[NSString stringWithFormat:@"%ld",indexPath.section];

if ([cellHeightDic objectForKey:key])

{

return [[cellHeightDic objectForKey:key] floatValue];

}

}

return kDefaultHeight;

}

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

{

return kTabeleHeaderHeight;

}

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

{

//section添加一个view和label

CGRect tempRect=CGRectMake(0, 0, tableView.bounds.size.width,kTabeleHeaderHeight);

UIView *headerView = [[UIView alloc]initWithFrame:tempRect];

headerView.backgroundColor=kThemeBackGroundColor;

NSArray *sectionArray=[dataSourceDic allKeys];

NSString *text=[sectionArray objectAtIndex:section];

UILabel *textLabel = [[UILabel alloc]initWithFrame:CGRectMake(12.0f, 14.0f, 100.0f, 15.0f)];

textLabel.font = [UIFont systemFontOfSize:15.0f];

textLabel.backgroundColor = [UIColor clearColor];

textLabel.textColor = [UIColor grayColor];

textLabel.text = text;

[headerView addSubview:textLabel];

return headerView;

}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

ZSDHelpCell *cell=(ZSDHelpCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

NSArray *sectionArray=[dataSourceDic allValues];

NSDictionary *rowDic=[sectionArray objectAtIndex:indexPath.section];

NSArray *questionList=[rowDic allKeys];

NSArray *answerList=[rowDic allValues];

cell.question=[questionList objectAtIndex:indexPath.row];

//设置每个cell的高度key

NSString *key=[NSString stringWithFormat:@"%ld",indexPath.section];

if (![cellHeightDic objectForKey:key])

{

cell.answer=[answerList objectAtIndex:indexPath.row];

CGFloat height=[cell getExpandHeight];

[cellHeightDic setObject:[NSNumber numberWithFloat:height] forKey:key];

}

// 隐藏cell

UIImage *normalImg = [UIImage imageNamed:@"member_icon_more"];

//展开cell

UIImage *selectImg = [UIImage imageNamed:@"common_icon_down"];

if ([expandArray containsObject:indexPath])

{

cell.selectImageView.image=selectImg;

cell.answer=[answerList objectAtIndex:indexPath.row];

}

else

{

cell.selectImageView.image=normalImg;

cell.answer=nil;

}

return cell;

}

#pragma mark - UITableViewDelegate

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

//如果数组中不存在该索引,那么把它添加到数组中

if(![expandArray containsObject:indexPath])

{

[expandArray addObject:indexPath];

}

//否则从数组中移除

else

{

[expandArray removeObject:indexPath];

}

[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

}

@end

ios-uitableviewcell展开的更多相关文章

  1. iOS UITableViewCell UITableVIewController 纯代码开发

    iOS UITableViewCell UITableVIewController 纯代码开发 <原创> .纯代码 自定义UITableViewCell 直接上代码 ////// #imp ...

  2. iOS UITableViewCell的"滑动出现多个按钮"

    本文授权转载,作者:@夏天是个大人了 前言: 本篇博客其实就是想介绍tableviewcell滑动的一些"事",昨天在逛github的时候看到的还挺有意思的三方库,简单用了一下感觉 ...

  3. iOS UITableViewCell点击时子视图背景透明的解决方法

    在做iOS项目的开发中,UITableView控件的应用十分广泛.在进行自定义UITableViewCell时,经常遇到这样的问题:在UITableViewCell上面添加了一个有背景颜色的子视图,当 ...

  4. ios UITableViewCell重用问题

    在写sina 微博界面的过程中使用到了cell,那么就是在cell上添加一些控件,但是由于每条微博的内容都是不同的,所以在显示的过程中,出现了内容重叠的问题,其实就是UITableViewCell重用 ...

  5. iOS UITableViewCell滑动删除

    一般我们使用列表的形式展现数据就会用到UITableView.在熟练掌握了用UITableView展示数据以后,开发过程中可能会遇到需要删除数据的需求,我们想实现在一行数据上划动一下,然后出现一个删除 ...

  6. iOS UITableViewCell的分割线向左延长15(cell长度为全宽)

    iOS7情况下: tableView.separatorInset = UIEdgeInsetsZero; iOS8.9情况下: 首先在viewDidLoad方法中加上如下代码: if ([table ...

  7. IOS - UITableViewCell的选中时的颜色及tableViewCell的selecte与deselecte

    1.系统默认的颜色设置 [cpp] view plaincopy //无色 cell.selectionStyle = UITableViewCellSelectionStyleNone; //蓝色 ...

  8. iOS UITableViewCell 中 调整imageView 的图片大小

    在我的项目中,很多地方都希望将UITableViewCell 中的imageView 能根据自己图片的大小来进行展示,而就为了解决这个问题又觉得重写UITableViewCell 很不值得. 如下: ...

  9. ios uitableviewcell动态计算高度

    #import <UIKit/UIKit.h> @interface TestCell : UITableViewCell @property (weak, nonatomic) IBOu ...

  10. 点击UITableviewCell展开收缩

    #import "ViewController.h" #import "ZSDTestCell.h" @interface ViewController ()& ...

随机推荐

  1. 关于iTunes11.1 不能刷自制固件的解决方案

    由于iTunes升级到11.1后, 苹果在程序里限制了不允许刷自制固件, 所以想刷自制固件暂时只能降级iTunes到11.1版本之前, 这里提供iTunes 11.0.5 的下载地址: Windows ...

  2. Codeforces 467C. George and Job (dp)

    题目链接:http://codeforces.com/contest/467/problem/C 求k个不重叠长m的连续子序列的最大和. dp[i][j]表示第i个数的位置个序列的最大和. 前缀和一下 ...

  3. php连接mysql配置

    php连接mysql测试代码: <?php $link=mysql_connect('localhost','root','123456'); if(!$link) echo "失败! ...

  4. kindeditor html代码过滤不能保存

    这是因为编辑器默认开启了过滤模式(filterMode:true).当filterMode为true时,编辑器会根据htmlTags设定自动过滤HTML代码,主要是为了生成干净的代码.如果想保留所有H ...

  5. C# 运用params修饰符来实现变长参数传递

    一般来说,参数个数都是固定的,定义为集群类型的参数可以实现可变数目参数的目的,但是.NET提供了更灵活的机制来实现可变数目参数,这就是使用params修饰符.可变数目参数的好处就是在某些情况下可以方便 ...

  6. WPF中的DependencyProperty存储方式详解

    前言 接触WPF有一段时间了,之前虽然也经常使用,但是对于DependencyProperty一直处于一知半解的状态.今天花了整整一下午将这个概念梳理了一下,自觉对这个概念有了较为清晰的认识,之前很多 ...

  7. 学习JQuery中文文档之get()函数

    前端大神群的群主告诉我们:学习一个框架最好的方法是去把官方文档研究一遍. 现在正式开始我的前端之路,从JQuery的中文文档开始. 基础不牢固,看起来有点慢,但是我会一直坚持下去的.把遇到的问题都记录 ...

  8. HTML第六天学习笔记

    今天主要对思维导图笔记进行了整理与更新:

  9. 常见错误:Apple Mach-O Linker Error

    常见错误描述: Apple Mach-O Linker Error这类错误的错误信息最后一行通常如下: Command /Developer/Platforms/iPhoneOS.platform/D ...

  10. Robot Instructions

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...