UITableView的cell折疊
#import"ViewController.h"
#import"customTableViewCell.h"
@interfaceViewController() {
UITableView* table;
BOOLflag [3];
}
@end
@implementationViewController
//釋放全局變量
- (void)dealloc {
[table release];
//繼承父類
[super dealloc];
}
- (void)viewDidLoad {
[super viewDidLoad];
//全局的UITableView
table= [[UITableView alloc] initWithFrame:[[UIScreen mainScreen]bounds] style:UITableViewStyleGrouped];
//UITableView代理
table.delegate=self;
table.dataSource=self;
//第二種注冊方式記得創(chuàng)建繼承于UITableViewCell的類下面創(chuàng)建cell時(shí)要注意類名稱
[table registerClass:[customTableViewCellclass] forCellReuseIdentifier:@"cell"];
//系統(tǒng)自動偏移屬性
self.automaticallyAdjustsScrollViewInsets=NO;
//添加
[self.view addSubview:table];
}
//返回區(qū)
- (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView {
return3;
}
//返回行
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {
//默認(rèn)折疊開關(guān)是關(guān)閉狀態(tài)
if(flag[section] ==NO) {
//關(guān)閉狀態(tài)下行數(shù)為0
return0;
}else{
//點(diǎn)擊打開后行數(shù)為5
return5;
}
}
//重用機(jī)制方法
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
//出列堂鲜。由于使用注冊铆隘,所以不需要判斷if(!cell)
customTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
//行文本內(nèi)容
cell.textLabel.text= [NSString stringWithFormat:@"%ld--%ld",indexPath.section,indexPath.row];
//行最右配件
cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
//區(qū)頭名稱可不寫
- (NSString*)tableView:(UITableView*)tableView titleForHeaderInSection:(NSInteger)section {
return@"區(qū)頭";
}
//區(qū)頭加載視圖
- (UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section {
//創(chuàng)建視圖不要寫添加挑童。return view;這一句就是默認(rèn)添加
UIView* view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 44, 44)] autorelease];
//寫button
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame=CGRectMake(0, 0, 44, 44);
//綁定方法要傳參
[btn addTarget:selfaction:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
//設(shè)置tag值
btn.tag= section + 10 ;
[view addSubview:btn];
//[btn release];不寫否則運(yùn)行時(shí)系統(tǒng)會崩潰立哑,出作用域{}時(shí)會自動釋放一次羞秤。
//設(shè)置圖片視圖
UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"a"]];
imgView.frame=CGRectMake(0, 0, 44, 44);
[view addSubview:imgView];
[imgView release];
//設(shè)置圖片視圖的動畫
if(flag[section] ==NO) {
imgView.transform=CGAffineTransformIdentity;
}else{
//設(shè)置圖片順時(shí)針旋轉(zhuǎn)45°
imgView.transform=CGAffineTransformMakeRotation(M_PI_2);
}
return view;
}
- (void)btnClick:(UIButton*)btn {
//檢驗(yàn)測試用的輸出可不寫
NSLog(@"btnClick");
NSLog(@"%ld",btn.tag);
//點(diǎn)擊取反按鈕狀態(tài)
flag[btn.tag- 10] = !flag[btn.tag- 10];
//檢驗(yàn)測試用的輸出可不寫
NSLog(@"%ld",btn.tag);
//NSIndexSet:索引的集合其中的參數(shù)是想要刷新的區(qū)的集合
//用區(qū)創(chuàng)建一個(gè)集合集合的元素就是區(qū)號012
NSIndexSet *set = [NSIndexSet indexSetWithIndex:btn.tag- 10];
//行的動畫
[table reloadSections:set withRowAnimation:UITableViewRowAnimationFade];
}
@end