文档章节

QQ好友列表

_短发控
 _短发控
发布于 2016/01/22 15:48
字数 615
阅读 50
收藏 0
#import "ListController.h"
#import "ViewController.h"

#import "HeaderView.h"
#import "FriendModel.h"
#import "Friend.h"

@interface ListController ()<HeaderViewDelegate>

@property (nonatomic, strong) NSMutableArray *friendsData;

@end

@implementation ListController

- (void)viewDidLoad {
    [super viewDidLoad];
    
      self.automaticallyAdjustsScrollViewInsets = YES;
    
    self.title = @"好友列表";
    self.view.backgroundColor = [UIColor yellowColor];
    
    self.tableView.sectionHeaderHeight = 40;//分区高度
    
    [self loadData];//读取数据
    
    
    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;
    
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

//读取数据
- (void)loadData {
    //获取路径
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"friends" withExtension:@"plist"];
    NSArray *tempAry = [NSArray arrayWithContentsOfURL:url];
    NSMutableArray *ary = [NSMutableArray array];
    for (NSDictionary *dic in tempAry) {
        FriendModel *model = [FriendModel friendModelWithDic:dic];
        [ary addObject:model];
    }
    self.friendsData = [NSMutableArray array];
    _friendsData = ary;
    NSLog(@"!!!!%@",_friendsData);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source
//分区个数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return _friendsData.count;
}
//分区行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    FriendModel *model = _friendsData[section];
    NSLog(@"+++%lu",(unsigned long)model.friends.count);
    NSInteger count = model.isOpened ? model.friends.count : 0;
    return count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellIdentifier = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleSubtitle) reuseIdentifier:cellIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    FriendModel *friendModel = _friendsData[indexPath.section];
    Friend *friend = friendModel.friends[indexPath.row];
    
    cell.imageView.image = [UIImage imageNamed:friend.icon];
    cell.textLabel.text = friend.name;
    cell.detailTextLabel.text = friend.intro;
        
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    ViewController *viewVC = [[ViewController alloc] init];
    [self.navigationController pushViewController:viewVC animated:YES];
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    HeaderView *headerView =[HeaderView headViewWithTableView:tableView];
    headerView.delegate = self;
    headerView.friendModel = _friendsData[section];
    headerView.contentView.backgroundColor = [UIColor orangeColor];
    return headerView;
}

- (void)clickHeadView {
    [self.tableView reloadData];
    
}
@end

import "FriendModel.h"
#import "Friend.h"

@implementation FriendModel

- (id)initWithDic:(NSDictionary *)dic {
    self = [super init];
    if (self) {
        [self setValuesForKeysWithDictionary:dic];
        NSMutableArray *tempAry = [NSMutableArray array];
        for (NSDictionary *dic1 in _friends) {
            Friend *friend = [Friend friendWithDic:dic1];
            [tempAry addObject:friend];
        }
        _friends = tempAry;
    }
    return self;
}

- (void)setValue:(id)value forUndefinedKey:(NSString *)key {

}
+ (id)friendModelWithDic:(NSDictionary *)dic {
    return [[self alloc] initWithDic:dic];
}

@end

#import <Foundation/Foundation.h>

@interface Friend : NSObject

@property (nonatomic, copy) NSString *icon;
@property (nonatomic, copy) NSString *intro;
@property (nonatomic, copy) NSString *name;

- (id)initWithDic:(NSDictionary *)dic;

+ (id)friendWithDic:(NSDictionary *)dic;

@end

#import <UIKit/UIKit.h>

@class FriendModel;

@protocol HeaderViewDelegate <NSObject>

- (void)clickHeadView;

@end



@interface HeaderView : UITableViewHeaderFooterView

@property (nonatomic, strong) FriendModel *friendModel;

@property (nonatomic, assign) id <HeaderViewDelegate>delegate;

+ (id)headViewWithTableView:(UITableView *)tableView;

@end

#import "HeaderView.h"
#import "FriendModel.h"

@interface HeaderView ()

@property (nonatomic, strong) UIButton *bgButton;
@property (nonatomic, strong) UILabel *numLabel;

@end

@implementation HeaderView

+ (id)headViewWithTableView:(UITableView *)tableView {
    static NSString *identifier = @"headView";
    HeaderView *headView = (HeaderView *)[tableView dequeueReusableCellWithIdentifier:identifier];
    
    if (headView == nil) {
        headView = [[HeaderView alloc] initWithReuseIdentifier:identifier];
    }
    return headView;
}

- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithReuseIdentifier:reuseIdentifier];
    if (self) {
        self.bgButton = [UIButton buttonWithType:(UIButtonTypeCustom)];
        [_bgButton setBackgroundImage:[UIImage imageNamed:@"buddy_header_bg"] forState:(UIControlStateNormal)];
         [_bgButton setBackgroundImage:[UIImage imageNamed:@"buddy_header_bg_highlighted"] forState:(UIControlStateHighlighted)];
        
        [_bgButton setImage:[UIImage imageNamed:@"buddy_header_arrow"] forState:(UIControlStateNormal)];
        [_bgButton setTitleColor:[UIColor blackColor] forState:(UIControlStateNormal)];
        
        _bgButton.imageView.contentMode = UIViewContentModeCenter;
        _bgButton.imageView.clipsToBounds = NO;
        _bgButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;//位置
        _bgButton.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
        _bgButton.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
        [_bgButton addTarget:self action:@selector(headBtnClick) forControlEvents:(UIControlEventTouchUpInside)];
        [self addSubview:_bgButton];
        
        self.numLabel = [[UILabel alloc] init];
        _numLabel.textAlignment = NSTextAlignmentRight;
        [self addSubview:_numLabel];
    }
    return self;
}

- (void)headBtnClick {
    _friendModel.opened = !_friendModel.isOpened;

    if ([_delegate respondsToSelector:@selector(clickHeadView)]) {
        [_delegate clickHeadView];
    }
}

- (void)setFriendModel:(FriendModel *)friendModel {
    _friendModel = friendModel;
    [_bgButton setTitle:friendModel.name forState:(UIControlStateNormal)];
    _numLabel.text = [NSString stringWithFormat:@"%lu",(unsigned long)friendModel.friends.count];
}

- (void)didMoveToSuperview {
    _bgButton.imageView.transform = _friendModel.isOpened ? CGAffineTransformMakeRotation(M_PI_2) : CGAffineTransformMakeRotation(0);
}

- (void)layoutSubviews {
    [super layoutSubviews];
    _bgButton.frame = self.bounds;
    _numLabel.frame = CGRectMake(self.frame.size.width - 70, 0, 60, self.frame.size.height);
}

@end


© 著作权归作者所有

_短发控
粉丝 1
博文 11
码字总数 3669
作品 0
西峰
私信 提问
加好友

18、设置自已的小号验证权限时,往往被人忽略的地方 一般来说系统默认的防骚扰验证方式是需要验证信息加为好友。如果你加别人为好友的时候别人要同意(同意之后对方就出现在你的好友列表中)并...

切忌浮躁
2015/12/25
1
0
NewBe/Newbe.Mahua.Framework

Newbe.Mahua.Framework dev master 说在最前面 开发本SDK的目的是为了促进.Net技术的交流学习。 由本SDK衍生的任何产品均与本SDK无关! 由本SDK支持的QQ自动化管理助手平台均与本SDK无关! ...

NewBe
2017/09/29
0
0
酷炫的Android QQ 开源了吧!!

酷炫的Android QQ 啥时候开源!?作为android的爱好者的我,总想近距离的去感受她的内在美: 自面世以来就受到各界热捧的Android,被誉为下一代无线设备系统的标杆。“天生的互联网基因”使人...

mdream
2010/08/01
889
3
点击tableViewCell会卡顿

有两处地方,一处是像QQ好友列表那样,点击单元格进入聊天界面,一处是点击像QQ最近联系人一样。点击好友列表的单元格跳转不会卡顿,点击最近联系人的单元格会卡顿。各位大神,可能是哪部分原...

笨笨的小白
2016/05/16
210
0
仿QQ聊天工具(Android源码)

QQ给人感觉界面很简洁大气, 但如果要自己实现QQ的界面的话,难度还是不小的, 小编经过数日鏖战,实现了类似QQ登录和聊天界面的功能,具体请看正文 本文demo下载地址 附带视频教程:http://ww...

智慧点点
2018/04/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

0.01-Win10安装linux子系统

一、安装Debian子系统 -1、控制面板设置: -1.1、打开“控制面板” —— “程序” —— “启用或关闭Windows功能” —— 勾选 “适用于Linux的Windows子系统” -2、设置: -2.1、打开“设置”...

静以修身2025
昨天
2
0
init 0-6 (启动级别:init 0,1,2,3,4,5,6)

启动级别: init 0,1,2,3,4,5,6 这是个很久的知识点了,只是自己一直都迷迷糊糊的,今天在翻出来好好理解下。。 0: 停机 1:单用户形式,只root进行维护 2:多用户,不能使用net file system...

圣洁之子
昨天
2
0
Android Camera HAL浅析

1、Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信号,经过A/D(模数转...

天王盖地虎626
昨天
2
0
聊聊Elasticsearch的ProcessProbe

序 本文主要研究一下Elasticsearch的ProcessProbe ProcessProbe elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/process/ProcessProbe.java public class ProcessProb......

go4it
昨天
3
0
mysql PL(procedure language)流程控制语句

在MySQL中,常见的过程式SQL语句可以用在存储体中。其中包括IF语句、CASE语句、LOOP语句、WHILE语句、ITERATE语句和LEAVE语句,它们可以进行流程控制。 IF语句相当于Java中的if()...else if(...

edison_kwok
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部