您的位置:首页 > 其它

QQList列表功能实现

2015-07-26 12:29 375 查看
1.模型
@class FriendsModel;
@interface GroupModel : NSObject

@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *online;
@property (nonatomic, strong) NSArray *friends;
@property (nonatomic, strong) FriendsModel *friendModel;
@property (nonatomic, assign) BOOL isOpen;
- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)GroupWithDict:(NSDictionary *)dict;

@end

#import "FriendsModel.h"

@implementation GroupModel

- (instancetype)initWithDict:(NSDictionary *)dict{
if (self = [super init])
{

[self setValuesForKeysWithDictionary:dict];

NSMutableArray *muArray = [NSMutableArray array];
for (NSDictionary *dict in self.friends)
{
FriendsModel *model = [FriendsModel friendWithDict:dict];
[muArray addObject:model];
}
self.friends = muArray;
}

return self;
}
+ (instancetype)GroupWithDict:(NSDictionary *)dict
{
return [[self alloc] initWithDict:dict];
}

@end

@interface FriendsModel : NSObject

@property (nonatomic, copy) NSString *icon;

@property (nonatomic, copy) NSString *name;

@property (nonatomic, copy) NSString *intro;

@property (nonatomic, assign) BOOL isVip;

- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)friendWithDict:(NSDictionary *)dict;

@end

#import "FriendsModel.h"

@implementation FriendsModel
- (instancetype)initWithDict:(NSDictionary *)dict{
if (self = [super init])
{

[self setValuesForKeysWithDictionary:dict];
}

return self;
}
+ (instancetype)friendWithDict:(NSDictionary *)dict{
return [[self alloc] initWithDict:dict];
}

@end

2.tableView UITableViewHeaderFooterView

的继承
@protocol HeaderViewDelegate <NSObject>

@optional
- (void)clickView;

@end

@interface HeaderView : UITableViewHeaderFooterView
@property (nonatomic,assign)id<HeaderViewDelegate>
delegate;

@property (nonatomic,strong) GroupModel *groupModel;
+ (instancetype)headerView:(UITableView *)tableView;

@end

#import "HeaderView.h"

#import “GroupModel.h"

@implementation HeaderView{
UIButton *_arrowBtn;
UILabel *_label;
}

+ (instancetype)headerView:(UITableView *)tableView
{
staticNSString *identifier =@"header";
HeaderView *header = [tableViewdequeueReusableCellWithIdentifier:identifier];
if (!header) {
header = [[HeaderViewalloc]initWithReuseIdentifier:identifier];
}
return header;
}

- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [superinit]) {

UIButton *button = [UIButtonbuttonWithType:UIButtonTypeCustom];

[button setBackgroundImage:[UIImageimageNamed:@"header_bg"]forState:UIControlStateNormal];

[button setBackgroundImage:[UIImageimageNamed:@"header_bg_highlighted"]forState:UIControlStateHighlighted];

[button setImage:[UIImageimageNamed:@"arrow"]forState:UIControlStateNormal];

[button setTitleColor:[UIColorblackColor]forState:UIControlStateNormal];
button.contentEdgeInsets =UIEdgeInsetsMake(0,10,0,
0);

button.contentHorizontalAlignment =UIControlContentHorizontalAlignmentLeft;
button.titleEdgeInsets =UIEdgeInsetsMake(0,10,0,
0);

button.imageView.contentMode =UIViewContentModeCenter;

[button addTarget:selfaction:@selector(buttonAction)forControlEvents:UIControlEventTouchUpInside];

//超出范围的图片不要剪切

button.imageView.clipsToBounds =NO;
_arrowBtn = button;
[selfaddSubview:_arrowBtn];

//创建label,显示当前在线人数
UILabel *labelRight = [[UILabelalloc]init];
labelRight.textAlignment =NSTextAlignmentCenter;
_label = labelRight;
[selfaddSubview:_label];
}

return
self;
}

#pragma mark - buttonAction
- (void)buttonAction
{
self.groupModel.isOpen = !self.groupModel.isOpen;
if ([self.delegaterespondsToSelector:@selector(clickView)])
{
[self.delegateclickView];
}
}

- (void)didMoveToSuperview
{

//通知相关视图他们的上级视图已经变化是当某个子控件加载到父控件上得时候调用

_arrowBtn.imageView.transform =self.groupModel.isOpen ?CGAffineTransformMakeRotation(M_PI_2)
:CGAffineTransformMakeRotation(0);

}

//布局
- (void)layoutSubviews
{

[superlayoutSubviews];

_arrowBtn.frame =self.bounds;

_label.frame =CGRectMake(self.frame.size.width
- 70,
0, 60,self.frame.size.height);
}

//赋值
- (void)setGroupModel:(GroupModel *)groupModel
{
_groupModel = groupModel;
[_arrowBtn setTitle:_groupModel.name forState:UIControlStateNormal];
_label.text = [NSString stringWithFormat:@"%@/%lu",_groupModel.online,(unsignedlong)_groupModel.friends.count];

}

3.控制器

#import "ListTableViewController.h"

#import "GroupModel.h"

#import "FriendsModel.h"

#import "HeaderView.h"

#import "ViewController.h"

@interface
ListTableViewController ()<HeaderViewDelegate>
@property (nonatomic, strong)NSArray *dataArray;

@end

@implementation ListTableViewController

//懒加载
- (NSArray *)dataArray{
if (!_dataArray) {

NSString *path = [[NSBundlemainBundle]pathForResource:@"friends.plist"ofType:nil];
NSArray *array = [NSArrayarrayWithContentsOfFile:path];

NSMutableArray *muArray = [NSMutableArrayarrayWithCapacity:array.count];
for (NSDictionary *dictin array) {
GroupModel *groupModel = [GroupModel GroupWithDict:dict];
[muArray addObject:groupModel];
}
_dataArray = [muArraycopy];
}

return_dataArray;

}
- (void)viewDidLoad
{

[superviewDidLoad];

self.tableView.sectionHeaderHeight =40;//自定义了sectionHeader一定要设置高

[selfclipExtraCellLine:self.tableView];//数据不够,去掉下面多余的表格线
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

return
self.dataArray.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
GroupModel *groupModel =self.dataArray[section];
NSInteger count = groupModel.isOpen ? groupModel.friends.count :0;
return count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath
{
staticNSString *identifier =@"friendCell";
UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:identifier];
if (!cell) {

cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:identifier];

}
GroupModel *groupModel =self.dataArray[indexPath.section];
FriendsModel *friendModel = groupModel.friends[indexPath.row];
cell.imageView.image = [UIImage imageNamed:friendModel.icon];
cell.textLabel.text = friendModel.name;
cell.detailTextLabel.text = friendModel.intro;

return cell;
}

#pragma mark - UITableView delegate
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
HeaderView *header = [HeaderViewheaderView:tableView];
header.delegate =self;
header.groupModel =self.dataArray[section];
return header;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
*)indexPath
{

ViewController *viewCtrl = [[ViewControlleralloc]init];

//viewCtrl.view.backgroundColor = [UIColor redColor];

[self.navigationControllerpushViewController:viewCtrlanimated:NO];
}

- (void)clickView
{

[self.tableViewreloadData];
}

#pragma mark - 去掉多余的线
- (void)clipExtraCellLine:(UITableView *)tableView
{
UIView *view = [[UIViewalloc]init];

view.backgroundColor = [UIColorclearColor];

[self.tableViewsetTableFooterView:view];
}

/*

设置视图控制颜色

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

self.window.backgroundColor = [UIColor whiteColor];

ListTableViewController *listVC = [[ListTableViewController alloc] init];

UINavigationController *navCtrl = [[UINavigationController alloc] initWithRootViewController:listVC];

self.window.rootViewController = navCtrl;

[self.window makeKeyAndVisible];

*/

素材下载地址:http://download.csdn.net/detail/baitxaps/8934111
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: