在QQ的好友页面有一个点击各个分类,然后展示分类中所有好友的效果,今天就说一说实现该效果的一个思路。
这个页面肯定是需要一个UITableView的,在tableview的代理方法中要实现分区的一个方法,即要返回tableview的分区数。返回的分区数就是好友的分类数。
tableview中各个分区的行数就是各个好友分类中的好友数。显示各个好友分类的视图是各个分区的一个头视图。头视图会有一个点击事件,用于好友分类的展开和收起。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
方法的实现很关键,1.要根据section的不同返回不同的行数。 2.要根据该行的点击状态显示行数(有显示所有的行数或者不显示行数两种状态)。代码:- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
GroupModel *groupModel = _dataArray[section];
NSInteger count = groupModel.isOpened ? groupModel.groupFriends.count : 0;
return count;
}
tableview的数据源一般是一个数组,数组中会有模型,每一个分区对应一个模型,模式中除了有每个分区要显示的数据,我们还应为模型增加一个属性来存储各个分区的点击状态即各个好友分类是否展开。
每次点击各个分区的头视图的时候需要完成两件事:1.改变各个模型中的点击的状态属性 2.更新tableview的点击的分区。
代码:
- (void)clickAction:(UIButton *)btn{
GroupModel *groupModel = _dataArray[btn.tag];
// 改变是否显示详情的状态
groupModel.isOpened = !groupModel.isOpened;
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:btn.tag] withRowAnimation:UITableViewRowAnimationAutomatic];
}
这里我在各个分区的头视图上添加了一个按钮。