您的位置:首页 > 其它

可折叠tableView - 仿照通讯录

2015-11-17 17:40 218 查看
我的xcode 是 IOS9.0 Xcode.7.0

版本符合,可复制黏贴直接用

#import "ViewController.h"

1.定义成员变量 遵循代理

@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>

{

NSMutableArray *_switchArray;

NSMutableArray *_contentArray;

UITableView *_tableView;

}

@end

@implementation ViewController

2. viewDidLoad 里

- (void)viewDidLoad {

[super viewDidLoad];

[self getData];

[self addUITableView];

}

3. addUITableView 里

- (void)addUITableView{

_tableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain]; //设置为朴素样式

_tableView.delegate = self;

_tableView.dataSource = self;

[self.view addSubview:_tableView];

}

//UITableViewDataSource 方法

/*

必须实现的方法

 方法一: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

 方法二: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

可选实现的方法

方法一: - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

方法二: - (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;

方法三:- (nullable NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section

方法四:- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath

方法五:- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath

方法六:- (nullable NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView

方法七:- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index

方法八:- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

方法九:- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath

*/

4 numberOfRowsInSection:

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

if (![[_switchArray objectAtIndex:section] boolValue]) {

return 0;// 闭合状态

}else{

return [[_contentArray objectAtIndex:section] count];// 每一组的行数

}

}

5.cellForRowAtIndexPath

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

NSString *cellID = @"CELL";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];

if (cell == nil) {

cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];

}

NSArray *array = _contentArray[indexPath.section];// 取出对应组

NSString *title = array[indexPath.row];//取出对应组

cell.textLabel.text = title;

return cell;

}

6.titleForHeaderInSection 头标题

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

return @"fwz";

}

7. viewForHeaderInSection :头视图

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

UIButton *button = [[UIButton alloc]init];

[button setTitle:[NSString stringWithFormat:@"%c",(char)('A' + section)] forState:UIControlStateNormal];

NSLog(@"1%@",button.titleLabel.text);

[button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

button.tag = 100 + section;

[button addTarget:self action:@selector(tap:) forControlEvents:UIControlEventTouchUpInside];

return button;

}

8.tap button的点击事件

-(void)tap:(UIButton *)sender{

//1.取出BOOL值

BOOL isOpen = [[_switchArray objectAtIndex:sender.tag - 100] boolValue];

// 2.把Bool 取反

[_switchArray replaceObjectAtIndex:sender.tag - 100 withObject:[NSNumber numberWithBool:!isOpen]];

// 3.tableview做相应的操作(刷新某一组)

[_tableView reloadSections:[NSIndexSet indexSetWithIndex:sender.tag -100] withRowAnimation:UITableViewRowAnimationAutomatic];

}

9.getData

- (void)getData{

//记录我们组的开关装态

_switchArray = [NSMutableArray array];

_contentArray = [NSMutableArray array];

for (int i = 'A'; i <= 'Z'; i ++) {

NSMutableArray *arrayNuMm = [NSMutableArray array];

for (int j = 0; j < 8; j ++) {

[arrayNuMm addObject:[NSString stringWithFormat:@"%c————%d",i,j]];//每一组的行数

}

[_contentArray addObject:arrayNuMm];// 26组

[_switchArray addObject:[NSNumber numberWithBool:NO]];// 默认为NO

}

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: