今天在工作的过程中,有一个页面的实现类似于qq好友列表。经过上网查资料,自己进行了简单的实现。
数据源(为plist文件):
groupname
初中同学
list
name
初中同学1
isonline
imagename
head01
name
初中同学2
isonline
imagename
head02
name
初中同学3
isonline
imagename
head03
groupname
高中同学
list
name
高中同学1
isonline
imagename
head08
name
高中同学2
isonline
imagename
head05
name
初中同学3
isonline
imagename
head07
groupname
大学同学
list
name
大学同学1
isonline
imagename
head04
name
大学同学2
isonline
imagename
head07
通过代码,将上面的数据通过代码进行调整,可以实现类似于qq好友列表的样式:标题分别是初中同学、高中同学、大学同学。
整体思路是这样的,整个页面是一个分组样式的tableView,这些标题可以放到headerView上,通过点击headerView来判断该分区是开还是收。不多说了,直接上代码。
@interface MyDevicesTableViewController ()
@property (nonatomic, retain)NSArray * dataList; // 全部的好友信息
@property (nonatomic, retain)NSMutableArray * groupNames; // 分组标题
@property (nonatomic, retain)NSMutableDictionary * headers; // 存放headerView的状态的字典
@property (nonatomic, retain)NSString * isOpen; // headerView的状态
@end
/**
* 获取数据
*/
- (void)loadData
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"friends" ofType:@"plist"];
self.dataList = [NSArray arrayWithContentsOfFile:path];
self.groupNames = [NSMutableArray arrayWithCapacity:self.dataList.count];
for (NSInteger i = 0; i < self.dataList.count; i++)
{
NSDictionary *dict = self.dataList[i];
[self.headers setObject:@"NO" forKey:[NSString stringWithFormat:@"%d",i]];
[self.groupNames addObject:dict[@"groupname"]];
}
// NSLog(@"_dataList = %@", self.dataList);
// NSLog(@"_headers = %@", self.headers);
// NSLog(@"_groupNames = %@", self.groupNames);
}
实现tableView的代理方法:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return self.groupNames.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
self.isOpen = [self.headers objectForKey:[NSString stringWithFormat:@"%d", section]];
NSArray *array = self.dataList[section][@"list"];
if ([self.isOpen isEqualToString:@"YES"]) {
return array.count;
} else {
return 0;
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 45;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 50;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
button.tag = section + 100;
button.bounds = CGRectMake(0, 0, self.view.frame.size.width, 45);
button.backgroundColor = [UIColor colorWithRed:0.4 green:0.4 blue:0.8 alpha:1.0];
button.titleLabel.font = [UIFont systemFontOfSize:16.0f];
NSString *title = self.groupNames[section];
[button setTitle:title forState:UIControlStateNormal];
[button addTarget:self action:@selector(expandFriends:) forControlEvents:UIControlEventTouchUpInside];
return button;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *TableSampleIdentifier = @"myDevices";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TableSampleIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableSampleIdentifier];
}
NSArray *array = self.dataList[indexPath.section][@"list"];
cell.textLabel.text = [array objectAtIndex:indexPath.row][@"name"];
return cell;
}
- (void)expandFriends:(UIButton *)header
{
NSInteger section = header.tag - 100;
self.isOpen = [self.headers objectForKey:[NSString stringWithFormat:@"%d", section]];
if ([self.isOpen isEqualToString:@"YES"]) {
self.isOpen = @"NO";
} else {
self.isOpen = @"YES";
}
[self.headers setObject:self.isOpen forKey:[NSString stringWithFormat:@"%d", section]];
[self.tableView reloadData];
}
以上就是全部的代码,希望能够对你起到帮助。当然,这只是进行了简单实现,没有进一步的完善。比如:标题现在没有图片,并且文字居中,和qq好友列表不同。由于时间问题,我没有实现。希望大神斧正。