码迷,mamicode.com
首页 > 其他好文 > 详细

QQList列表功能实现

时间:2017-08-18 20:06:22      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:sel   down   object   integer   控件   key   horizon   pre   click   

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 allocinitWithDict:dict];

}


@end


@interface FriendsModel : NSObject


@property (nonatomiccopyNSString *icon;

@property (nonatomiccopyNSString *name;

@property (nonatomiccopyNSString *intro;

@property (nonatomicassignBOOL 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 allocinitWithDict: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

QQList列表功能实现

标签:sel   down   object   integer   控件   key   horizon   pre   click   

原文地址:http://www.cnblogs.com/gccbuaa/p/7391243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!