ios-uitableviewcell展开
#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展开的更多相关文章
- iOS UITableViewCell UITableVIewController 纯代码开发
iOS UITableViewCell UITableVIewController 纯代码开发 <原创> .纯代码 自定义UITableViewCell 直接上代码 ////// #imp ...
- iOS UITableViewCell的"滑动出现多个按钮"
本文授权转载,作者:@夏天是个大人了 前言: 本篇博客其实就是想介绍tableviewcell滑动的一些"事",昨天在逛github的时候看到的还挺有意思的三方库,简单用了一下感觉 ...
- iOS UITableViewCell点击时子视图背景透明的解决方法
在做iOS项目的开发中,UITableView控件的应用十分广泛.在进行自定义UITableViewCell时,经常遇到这样的问题:在UITableViewCell上面添加了一个有背景颜色的子视图,当 ...
- ios UITableViewCell重用问题
在写sina 微博界面的过程中使用到了cell,那么就是在cell上添加一些控件,但是由于每条微博的内容都是不同的,所以在显示的过程中,出现了内容重叠的问题,其实就是UITableViewCell重用 ...
- iOS UITableViewCell滑动删除
一般我们使用列表的形式展现数据就会用到UITableView.在熟练掌握了用UITableView展示数据以后,开发过程中可能会遇到需要删除数据的需求,我们想实现在一行数据上划动一下,然后出现一个删除 ...
- iOS UITableViewCell的分割线向左延长15(cell长度为全宽)
iOS7情况下: tableView.separatorInset = UIEdgeInsetsZero; iOS8.9情况下: 首先在viewDidLoad方法中加上如下代码: if ([table ...
- IOS - UITableViewCell的选中时的颜色及tableViewCell的selecte与deselecte
1.系统默认的颜色设置 [cpp] view plaincopy //无色 cell.selectionStyle = UITableViewCellSelectionStyleNone; //蓝色 ...
- iOS UITableViewCell 中 调整imageView 的图片大小
在我的项目中,很多地方都希望将UITableViewCell 中的imageView 能根据自己图片的大小来进行展示,而就为了解决这个问题又觉得重写UITableViewCell 很不值得. 如下: ...
- ios uitableviewcell动态计算高度
#import <UIKit/UIKit.h> @interface TestCell : UITableViewCell @property (weak, nonatomic) IBOu ...
- 点击UITableviewCell展开收缩
#import "ViewController.h" #import "ZSDTestCell.h" @interface ViewController ()& ...
随机推荐
- CentOS安装配置VSFTP服务器
{:toc} 前言 本文用最简单的方式创建FTP服务,即创建一个大家都可以访问的目录,没有涉及到各种权限限制. 创建目录 在安装配置ftp之前,首先创建一个目录,用来做ftp根目录.我创建的是/hom ...
- hdoj 5417 Victor and Machine
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5417 水题,一开始题目读错了做了好久,每次停工以后都是重新计时. 需要注意的是,先除后乘注意加括号 # ...
- Excel数据通过plsql导入到Oracle
Excel数据通过plsql导入到Oracle 1 准备Excel导入数据 2 把Excel文件另存为(文本文件(制表符分隔)(*.txt)) 或者将Excel文件另存为(Unicode文本) 之后唯 ...
- 为Eclipse/MyEclipse添加JDK API Document帮助文档
1.下载 Java SE Development Kit 8 Documentation . 2.启动Eclipse,Window-Preference-Java-Installed JREs: 3. ...
- php资料站
Veda 原型:http://www.nowamagic.net/librarys/veda/cate/PHP
- jquery与ajax应用
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
今天接入激光推送,一直报错: Java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker; ...
- Extjs 实用——不定时更新
用Ext做项目,总结的一些属性针对不同控件 1.grid 中,编辑表格内容时的点击变输入框 plugins: [cellEditing] //点击变输入框 columns:[{ //在需要变书入框的列 ...
- Ext.form.ComboBox 后台取值 动态加载 ext5.0.0
我用的extjs是5.0.0版本的. 请注意:如果这里没有的combobox相关内容,这里一定有. 开始的时候keyup事件取到的数据就是放不到ComboBox中,放全局变量也不好用.最后大神出手帮忙 ...
- MFC非模态对话框中屏蔽ESC键
个人的编程经验认为:对于非模态对话框,按下ESC键和点击红叉都会响应OnCancel()函数,而不会去响应OnClose()函数. 我们都知道,如果想屏蔽Enter键,只须重写OnOK()函数即可(重 ...