QQList列表功能实现

Posted gccbuaa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QQList列表功能实现相关的知识,希望对你有一定的参考价值。

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列表功能实现的主要内容,如果未能解决你的问题,请参考以下文章

jQuery练习--[实现左移右移功能,实现列表动态新增,删除功能;实现表格隔行变色,选中时高亮显示.]

Editable DataGrid 实现列表新增编辑功能

通过 flutter 实现一个列表功能

c#如何实现显示在线用户列表的功能

微信小程序之多列表的显示和隐藏功能(附源码)

前端学习(2982):实现商品功能列表