亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

使用UItableview在iOS應用開發中實現好友列表功能

2020-07-26 03:31:24
字體:
來源:轉載
供稿:網友

基本實現
一、項目結構和plist文件

201512491832922.png (989×495)

二、實現代碼

1.說明:

主控制器直接繼承UITableViewController

復制代碼 代碼如下:

//  YYViewController.h
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface YYViewController : UITableViewController

@end


在storyboard中進行了關聯

201512492017809.png (1125×201)

2.代碼

數據模型部分:

YYQQGroupModel.h文件

復制代碼 代碼如下:

//
//  YYQQGroupModel.h
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface YYQQGroupModel : NSObject
/**
 *  名稱屬性
 */
@property(nonatomic,copy)NSString *name;
/**
 *  是否在線
 */
@property(nonatomic,copy)NSString *online;
/**
 *  好友列表
 */
@property(nonatomic,strong)NSArray *friends;

-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype) qqGroupModelWithDict:(NSDictionary *)dict;
@end


YYQQGroupModel.m文件
復制代碼 代碼如下:

//
//  YYQQGroupModel.m
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYQQGroupModel.h"
#import "YYFriendsModel.h"

@implementation YYQQGroupModel
-(instancetype)initWithDict:(NSDictionary *)dict
{
    if (self=[super init]) {
        //將字典轉換為模型
        [self setValuesForKeysWithDictionary:dict];
       
        //定義一個數組來保存轉換后的模型
        NSMutableArray *models=[NSMutableArray arrayWithCapacity:self.friends.count];
        for (NSDictionary *dict in self.friends) {
            YYFriendsModel *friends=[YYFriendsModel friendsWithDict:dict];
            [models addObject:friends];
        }
        _friends=[models copy];
    }
    return self;
}

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


YYFriendsModel.h文件
復制代碼 代碼如下:

//
//  YYFriendsModel.h
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface YYFriendsModel : NSObject
/**
 *  每個好友的名稱
 */
@property(nonatomic,copy)NSString *name;
/**
 *每個好友的頭像
 */
@property(nonatomic,copy)NSString *icon;
/**
 *  每個好友的個性簽名
 */
@property(nonatomic,copy)NSString *intro;
/**
 *  該好友是否是vip
 */
@property(nonatomic,assign,getter = isVip)BOOL vip;

-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)friendsWithDict:(NSDictionary *)dict;
@end


YYFriendsModel.m文件
復制代碼 代碼如下:

//
//  YYFriendsModel.m
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYFriendsModel.h"

@implementation YYFriendsModel
-(instancetype)initWithDict:(NSDictionary *)dict
{
    if (self=[super init]) {
        [self setValuesForKeysWithDictionary:dict];
    }
    return self;
}

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


視圖部分

YYfriendCell.h文件

復制代碼 代碼如下:

//
//  YYfriendCell.h
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <UIKit/UIKit.h>
@class YYFriendsModel;
@interface YYfriendCell : UITableViewCell

@property(nonatomic,strong)YYFriendsModel *friends;

+(instancetype)cellWithTableview:(UITableView *)tableView;
@end


YYfriendCell.m文件
復制代碼 代碼如下:

//
//  YYfriendCell.m
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYfriendCell.h"
#import "YYFriendsModel.h"
//私有擴展
@interface YYfriendCell()


@end


復制代碼 代碼如下:

@implementation YYfriendCell

+(YYfriendCell *)cellWithTableview:(UITableView *)tableView
{
    static NSString *identifier=@"qq";
    YYfriendCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell==nil) {
        //這里使用系統自帶的樣式
        cell=[[YYfriendCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
        NSLog(@"創建一個cell");
    }
    return cell;
}

-(void)setFriends:(YYFriendsModel *)friends
{
    _friends=friends;
    //1.設置頭像
    self.imageView.image=[UIImage imageNamed:_friends.icon];
       //2.設置昵稱
    self.textLabel.text=_friends.name;
     //3.設置簡介
    self.detailTextLabel.text=_friends.intro;
 //判斷是否是會員
    /**
     *  這里有個注意點,如果不寫else設置為黑色,會怎么樣?
     */
    if (_friends.isVip) {
        [self.textLabel setTextColor:[UIColor redColor]];
    }else
    {
    [self.textLabel setTextColor:[UIColor blackColor]];
    }
}
@end


主控制器部分

YYViewController.m文件

復制代碼 代碼如下:

//
//  YYViewController.m
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"
#import "YYQQGroupModel.h"
#import "YYfriendCell.h"
#import "YYFriendsModel.h"

@interface YYViewController ()
/**
 *  用來保存所有的分組數據
 */
@property(nonatomic,strong)NSArray *groupFriends;
@end


復制代碼 代碼如下:

@implementation YYViewController
#pragma mark-懶加載
//1.先拿到數據,實現懶加載
-(NSArray *)groupFriends
{
    if (_groupFriends==nil) {
        NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"friends.plist" ofType:nil];
        NSArray *arrayM=[NSArray arrayWithContentsOfFile:fullpath];
       
        NSMutableArray *models=[NSMutableArray arrayWithCapacity:arrayM.count];
        for (NSDictionary *dict in arrayM) {
            YYQQGroupModel *group=[YYQQGroupModel qqGroupModelWithDict:dict];
            [models addObject:group];
        }
        _groupFriends=[models copy];
    }
    return _groupFriends;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
     self.tableView.sectionHeaderHeight = 100;
}

#pragma mark-  設置數據源
//返回多少組
//為什么這里不會智能提示?因為這些方法是uitableview協議里的,默認并沒有遵守協議,讓主控制器類繼承uitableviewcontroller后,就已經遵守了
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return self.groupFriends.count;
}
//每組返回多少行
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    //取出對應的組模型
    YYQQGroupModel *group=self.groupFriends[section];
    //返回對應組中的好友數
    return group.friends.count;
}
//每組每行的內容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //1.創建cell
    YYfriendCell *cell=[YYfriendCell cellWithTableview:tableView];

    //2.設置cell
    YYQQGroupModel *group=self.groupFriends[indexPath.section];
    YYFriendsModel *friends=group.friends[indexPath.row];
    cell.friends=friends;
    //3.返回一個cell
    return cell;
}


#pragma mark - 代理方法
// 當一個分組標題進入視野的時候就會調用該方法
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    //    1.創建頭部視圖
    UIView *view = [[UIView alloc] init];
    view.backgroundColor = [UIColor grayColor];
    //    2.返回頭部視圖
    return view;
}

//設置分組頭部標題的高度
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 44;
}

#pragma mark  隱藏狀態欄
-(BOOL)prefersStatusBarHidden
{
    return YES;
}
@end


實現的簡陋效果:

201512492117194.png (316×503)

三、注意點

(1)設置頭部視圖的方法

201512492135800.png (790×404)

(2)在重寫set方法時,應該考慮到回滾。

201512492152513.png (570×231)

更為復雜的實現
一、實現效果

201512492209267.png (317×497)201512492303290.png (318×501)

二、實現代碼

1.數據模型部分

 YYQQGroupModel.h文件

復制代碼 代碼如下:

//
//  YYQQGroupModel.h
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface YYQQGroupModel : NSObject
/**
 *  名稱屬性
 */
@property(nonatomic,copy)NSString *name;
/**
 *  是否在線
 */
@property(nonatomic,copy)NSString *online;
/**
 *  好友列表
 */
@property(nonatomic,strong)NSArray *friends;

//記錄當前組是否要打開
@property(nonatomic,assign,getter = isOpen)BOOL open;

-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype) qqGroupModelWithDict:(NSDictionary *)dict;
@end


 YYQQGroupModel.m文件
復制代碼 代碼如下:

//
//  YYQQGroupModel.m
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYQQGroupModel.h"
#import "YYFriendsModel.h"

@implementation YYQQGroupModel
-(instancetype)initWithDict:(NSDictionary *)dict
{
    if (self=[super init]) {
        //將字典轉換為模型
        [self setValuesForKeysWithDictionary:dict];
       
        //定義一個數組來保存轉換后的模型
        NSMutableArray *models=[NSMutableArray arrayWithCapacity:self.friends.count];
        for (NSDictionary *dict in self.friends) {
            YYFriendsModel *friends=[YYFriendsModel friendsWithDict:dict];
            [models addObject:friends];
        }
        _friends=[models copy];
    }
    return self;
}

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


YYFriendsModel.h文件
復制代碼 代碼如下:

//
//  YYFriendsModel.h
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface YYFriendsModel : NSObject
/**
 *  每個好友的名稱
 */
@property(nonatomic,copy)NSString *name;
/**
 *每個好友的頭像
 */
@property(nonatomic,copy)NSString *icon;
/**
 *  每個好友的個性簽名
 */
@property(nonatomic,copy)NSString *intro;
/**
 *  該好友是否是vip
 */
@property(nonatomic,assign,getter = isVip)BOOL vip;

-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)friendsWithDict:(NSDictionary *)dict;
@end


YYFriendsModel.m文件
復制代碼 代碼如下:

//
//  YYFriendsModel.m
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYFriendsModel.h"

@implementation YYFriendsModel
-(instancetype)initWithDict:(NSDictionary *)dict
{
    if (self=[super init]) {
        [self setValuesForKeysWithDictionary:dict];
    }
    return self;
}

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


2.視圖部分

YYfriendCell.h文件

復制代碼 代碼如下:

//
//  YYfriendCell.h
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <UIKit/UIKit.h>
@class YYFriendsModel;
@interface YYfriendCell : UITableViewCell

@property(nonatomic,strong)YYFriendsModel *friends;

+(instancetype)cellWithTableview:(UITableView *)tableView;
@end


YYfriendCell.m文件
復制代碼 代碼如下:

//
//  YYfriendCell.m
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYfriendCell.h"
#import "YYFriendsModel.h"
//私有擴展
@interface YYfriendCell()


@end


復制代碼 代碼如下:

@implementation YYfriendCell

+(YYfriendCell *)cellWithTableview:(UITableView *)tableView
{
    static NSString *identifier=@"qq";
    YYfriendCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell==nil) {
        //這里使用系統自帶的樣式
        cell=[[YYfriendCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
        NSLog(@"創建一個cell");
    }
    return cell;
}

-(void)setFriends:(YYFriendsModel *)friends
{
    _friends=friends;
    //1.設置頭像
    self.imageView.image=[UIImage imageNamed:_friends.icon];
       //2.設置昵稱
    self.textLabel.text=_friends.name;
   
     //3.設置簡介
    self.detailTextLabel.text=_friends.intro;
 //判斷是否是會員
   
    /**
     *  這里有個注意點,如果不寫else設置為黑色,會怎么樣?
     */
    if (_friends.isVip) {
        [self.textLabel setTextColor:[UIColor redColor]];
    }else
    {
    [self.textLabel setTextColor:[UIColor blackColor]];
    }
     //調整字體的大小
    self.textLabel.font=[UIFont systemFontOfSize:15.f];
    self.detailTextLabel.font=[UIFont systemFontOfSize:10.f];
}
@end


YYHeaderView.h文件
復制代碼 代碼如下:

//
//  YYHeaderView.h
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-6-1.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <UIKit/UIKit.h>

@class YYQQGroupModel,YYHeaderView;

//商量一個協議
@protocol YYHeaderViewDelegate <NSObject>
-(void)headerViewDidClickHeaderView:(YYHeaderView *)headerView;
@end


復制代碼 代碼如下:

@interface YYHeaderView : UITableViewHeaderFooterView

@property(nonatomic,strong)YYQQGroupModel *group;
//提供一個類方法,創建一個頭部視圖
+(instancetype)headerWithTableView:(UITableView *)tableView;


//delegate遵守YYHeaderViewDelegate這個協議,可以使用協議中的方法
@property(nonatomic,weak)id<YYHeaderViewDelegate> delegate;
@end

YYHeaderView.m文件

//
//  YYHeaderView.m
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-6-1.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYHeaderView.h"
#import "YYQQGroupModel.h"

@interface YYHeaderView()
@property(nonatomic,strong)UIButton *btn;
@property(nonatomic,strong)UILabel *lab;
@end


復制代碼 代碼如下:

@implementation YYHeaderView


//創建一個自定義的頭部分組視圖
+(instancetype)headerWithTableView:(UITableView *)tableView
{
    static NSString *indentifier=@"header";
    //先到緩存池中去取數據
    YYHeaderView *headerview=[tableView dequeueReusableCellWithIdentifier:indentifier];
    //如果沒有,則自己創建
    if (headerview==nil) {
        headerview=[[YYHeaderView alloc]initWithReuseIdentifier:indentifier];
    }
    //返回一個頭部視圖
    return headerview;
}

#warning 注意在構造方法中為控件設置的frame是無效的
-(id)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
    //初始化父類中的構造方法
    if (self=[super initWithReuseIdentifier:reuseIdentifier]) {
        //創建一個按鈕
        UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
        //設置按鈕的屬性
        //設置普通狀態下按鈕的背景圖片
        [btn setBackgroundImage:[UIImage imageNamed:@"buddy_header_bg"] forState:UIControlStateNormal];
        //設置高亮狀態下按鈕的背景圖片
        [btn setBackgroundImage:[UIImage imageNamed:@"buddy_header_bg_highlighted"] forState:UIControlStateHighlighted];
       
        //設置按鈕上的小三角圖片
        [btn setImage:[UIImage imageNamed:@"buddy_header_arrow"] forState:UIControlStateNormal];
        //設置按鈕上信息的對其方式為左對齊
        btn.contentHorizontalAlignment=UIControlContentHorizontalAlignmentLeft;
        //設置小三角圖片的內邊距
        btn.contentEdgeInsets=UIEdgeInsetsMake(0, 20, 0, 0);
        //設置按鈕上文字距離小三角圖片的距離
        btn.titleEdgeInsets=UIEdgeInsetsMake(0, 20, 0, 0);
        //設置按鈕上分組標題的文本顏色(默認是白色)
        //[btn setTintColor:[UIColor blackColor]];
        [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        //添加按鈕的點擊事件
        [btn addTarget:self action:@selector(btnOnclick:) forControlEvents:UIControlEventTouchUpInside];
       
        // 設置btn中的圖片不填充整個imageview
        btn.imageView.contentMode = UIViewContentModeCenter;
        // 超出范圍的圖片不要剪切
               // btn.imageView.clipsToBounds = NO;
        btn.imageView.layer.masksToBounds = NO;
       
        //把按鈕添加到視圖
        [self addSubview:btn];
        self.btn=btn;
       
        //創建一個lab
        UILabel *lab=[[UILabel alloc]init];
        //設置在線人數的對齊方式為右對齊
        lab.textAlignment=NSTextAlignmentRight;
        //設置在線人數的文本顏色為灰色
        lab.textColor=[UIColor grayColor];
        [self addSubview:lab];
        self.lab=lab;
    }
    return self;
}


-(void)btnOnclick:(UIButton *)btn
{
    NSLog(@"按鈕被點擊了");
    //修改模型的isopen屬性
    //1.修改模型數據
    self.group.open=!self.group.isOpen;
    //2.刷新表格
    //(刷新表格的功能由控制器完成,在這里可以設置一個代理),當按鈕被點擊的時候,就通知代理對表格進行刷新
    //通知代理
    if ([self.delegate respondsToSelector:@selector(headerViewDidClickHeaderView:)]) {
        [self.delegate headerViewDidClickHeaderView:self];
    }
}

//當控件的frame值改變時,會自動調用該方法,故可以在該方法中設置控件的frame;
-(void)layoutSubviews
{
#warning 一定不要忘記調用父類的方法
    [super layoutSubviews];
    //設置按鈕的frame和頭部視圖一樣大小
    self.btn.frame=self.bounds;
   
    //設置lab的frame
    CGFloat padding=20;
    CGFloat labW=50;
    CGFloat labH=self.frame.size.height;
    CGFloat labY=0;
    CGFloat labX=self.frame.size.width-padding-labW;
    self.lab.frame=CGRectMake(labX, labY, labW, labH);
}

#pragma mark - 當一個控件被添加到其它視圖上的時候會調用以下方法
// 已經被添加到父視圖上的時候會調用
- (void)didMoveToSuperview
{
    NSLog(@"已經添加到視圖了");
    // 在這個方法中就快要拿到最新的被添加到tableview上的頭部視圖修改它的圖片
    if (self.group.isOpen) {
        //讓小三角圖片向下旋轉
        self.btn.imageView.transform = CGAffineTransformMakeRotation(M_PI_2);
    }
}

// 即將被添加到父視圖上的時候會調用
- (void)willMoveToSuperview:(UIView *)newSuperview
{
     NSLog(@"將要添加到視圖了");
}


//重寫get方法,設置數據
-(void)setGroup:(YYQQGroupModel *)group
{
    _group=group;
    //設置分組標題

    //self.btn.titleLabel.text=_group.name;
    #warning 請注意在設置按鈕的文本時,一定要設置按鈕的狀態,像上面這樣設置不會顯示
    [self.btn setTitle:_group.name forState:UIControlStateNormal];
    NSLog(@"%@",self.btn.titleLabel.text);
    //設置在線人數
    self.lab.text=[NSString stringWithFormat:@"%@/%d",_group.online,_group.friends.count];
}

@end


3.控制器部分

YYViewController.h文件

復制代碼 代碼如下:

//
//  YYViewController.h
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface YYViewController : UITableViewController

@end

YYViewController.m文件

//
//  YYViewController.m
//  02-QQ好友列表(基本數據的加載)
//
//  Created by apple on 14-5-31.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"
#import "YYQQGroupModel.h"
#import "YYfriendCell.h"
#import "YYFriendsModel.h"
#import "YYHeaderView.h"

@interface YYViewController ()<YYHeaderViewDelegate>
/**
 *  用來保存所有的分組數據
 */
@property(nonatomic,strong)NSArray *groupFriends;
@end


復制代碼 代碼如下:

@implementation YYViewController
#pragma mark-懶加載
//1.先拿到數據,實現懶加載
-(NSArray *)groupFriends
{
    if (_groupFriends==nil) {
        NSString *fullpath=[[NSBundle mainBundle]pathForResource:@"friends.plist" ofType:nil];
        NSArray *arrayM=[NSArray arrayWithContentsOfFile:fullpath];
       
        NSMutableArray *models=[NSMutableArray arrayWithCapacity:arrayM.count];
        for (NSDictionary *dict in arrayM) {
            YYQQGroupModel *group=[YYQQGroupModel qqGroupModelWithDict:dict];
            [models addObject:group];
        }
        _groupFriends=[models copy];
    }
    return _groupFriends;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
     self.tableView.sectionHeaderHeight = 100;
       
}

#pragma mark-  設置數據源
//返回多少組
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return self.groupFriends.count;
}
//每組返回多少行
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
//    //取出對應的組模型
        YYQQGroupModel *group=self.groupFriends[section];
//    //返回對應組中的好友數
//    return group.friends.count;
   
    //在這里進行判斷,如果該組收攏,那就返回0行,如果該組打開,就返回實際的行數
//    if (group.isOpen) {
//        return group.friends.count;
//    }else
//    {
//        return 0;
//    }
   
    if (group.isOpen) {
        // 代表要展開
        return group.friends.count;
    }else
    {
        // 代表要合攏
        return 0;
    }
}
//每組每行的內容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //1.創建cell
    YYfriendCell *cell=[YYfriendCell cellWithTableview:tableView];

    //2.設置cell
    YYQQGroupModel *group=self.groupFriends[indexPath.section];
    YYFriendsModel *friends=group.friends[indexPath.row];
    cell.friends=friends;
    //3.返回一個cell
    return cell;
}


#pragma mark - 代理方法
// 當一個分組標題進入視野的時候就會調用該方法
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
//    //    1.創建頭部視圖
//    UIView *view = [[UIView alloc] init];
//    view.backgroundColor = [UIColor grayColor];
//    //    2.返回頭部視圖
//    return view;
   
    //創建自定義的頭部視圖
    YYHeaderView *headerview=[YYHeaderView headerWithTableView:tableView];
   
    //設置當前控制器為代理
    headerview.delegate=self;
    //設置頭部視圖的數據
    YYQQGroupModel *groupmodel=self.groupFriends[section];
    headerview.group=groupmodel;
    //返回頭部視圖
    return headerview;
}


#pragma mark - YYHeaderViewDelegate
-(void)headerViewDidClickHeaderView:(YYHeaderView *)headerView
{
    //重新調用數據源的方法刷新數據
    [self.tableView reloadData];
}
//設置分組頭部標題的高度
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 30;
}

#pragma mark  隱藏狀態欄
-(BOOL)prefersStatusBarHidden
{
    return YES;
}
@end


三、代碼說明

1.項目文件結構

201512492325539.png (923×544)

2.注意點

(1)調整字體的大?。?nbsp;   self.textLabel.font=[UIFont systemFontOfSize:15.f];

(2)-(void)layoutSubviews方法。該方法在控件的frame被改變的時候就會調用,這個方法一般用于調整子控件的位置,注意一定要調用[super layoutSubviews];

(3)但凡在init方法中獲取到的frame都是0;

(4)如果控件不顯示,有以下一些排錯方法

a.frame為空(沒有設置frame)
b.hidden是否為YES
c.alpha<=0.1(透明度)
d.沒有添加到父控件中
e.查看父控件以上幾點
(5)請注意在設置按鈕的文本時,一定要設置按鈕的狀態

正確:[self.btn setTitle:_group.name forState:UIControlStateNormal];
錯誤: self.btn.titleLabel.text=_group.name;
(6)調用構造方法時,一定要先初始化父類的方法,先判斷,再進行自己屬性的初始化

self=[super initWithReuseIdentifier:reuseIdentifier]
if(self)
{
……
}
(7)當一個控件被添加到其它視圖上的時候會調用以下方法
1) 已經被添加到父視圖上的時候會調用- (void)didMoveToSuperview

2) 即將被添加到父視圖上的時候會調用- (void)willMoveToSuperview:(UIView *)newSuperview

(8)圖片填充知識

   1)設置btn中的圖片不填充整個imageview btn.imageView.contentMode = UIViewContentModeCenter;

   2)超出范圍的圖片不要剪切

  //btn.imageView.clipsToBounds = NO;

  btn.imageView.layer.masksToBounds = NO;

四、補充(代理)

設置代理的幾個步驟
(1)如果一個視圖中的某個按鈕被點擊了,這個時候需要去主控制器中刷新數據。有一種做法是,讓這個視圖擁有控制器這個屬性,然后當按鈕被點擊的時候去利用該屬性去做刷新數據的操作。另一種做法是把控制器設置為這個視圖的代理,當視圖中的某個按鈕被點擊的時候,通知它的代理(主控制器)去干刷新數據這件事。
(2)要成為代理是由條件的,有以下幾個步驟
1).雙方約定一個協議(代理協議,注意命名規范),在視圖中自定義一個協議,協議中提供一個方法。

復制代碼 代碼如下:

@protocol YYHeaderViewDelegate <NSObject>

-(void)headerViewDidClickHeaderView:(YYHeaderView *)headerView;

@end


2).在視圖中添加一個id類型的屬性變量,任何人只要遵守了約定協議的都可以成為它的代理。
//delegate遵守YYHeaderViewDelegate這個協議,可以使用協議中的方法
復制代碼 代碼如下:

@property(nonatomic,weak)id<YYHeaderViewDelegate> delegate;

3).在控制器中,遵守自定義的代理協議,就可以使用代理提供的方法,在這個方法中對數據進行刷新。
復制代碼 代碼如下:

@interface YYViewController ()<YYHeaderViewDelegate>

-(void)headerViewDidClickHeaderView:(YYHeaderView *)headerView

{

    [self.tableView reloadData];

}


4).把控制器設置作為按鈕點擊事件的代理。
headerview.delegate=self;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
九九热在线精品视频| 福利二区91精品bt7086| 久久久久久久久久婷婷| 亚洲精品久久久久中文字幕欢迎你| 欧美成人午夜免费视在线看片| 国产日韩视频在线观看| 国外色69视频在线观看| 亚洲综合第一页| 日产精品99久久久久久| 亚洲无限av看| 欧美国产在线视频| 中文字幕久热精品在线视频| 日本欧美一级片| 欧美一级大片视频| 欧美日韩国产中文字幕| 主播福利视频一区| 中文字幕亚洲一区二区三区| 国产女精品视频网站免费| 日韩在线观看成人| 亚洲第一网站男人都懂| 欧美电影在线观看| 97人人做人人爱| 欧美在线视频观看免费网站| 国产偷亚洲偷欧美偷精品| 18久久久久久| 精品国产乱码久久久久久虫虫漫画| 国内成人精品视频| 国产最新精品视频| 亚洲一区二区三区四区在线播放| 91手机视频在线观看| 久久精品亚洲一区| 精品福利在线视频| 日韩av黄色在线观看| 色婷婷综合久久久久中文字幕1| 国产精品久久久久久久9999| 中文字幕亚洲欧美日韩在线不卡| 国产精品三级网站| 亚洲天堂av女优| 成人免费在线视频网址| 97不卡在线视频| 91夜夜揉人人捏人人添红杏| 国产精品久久久久久久久久久不卡| 亚洲综合中文字幕在线观看| 国产视频欧美视频| 久久久在线视频| 精品久久久久国产| 色偷偷888欧美精品久久久| 2020国产精品视频| 中文字幕自拍vr一区二区三区| 日本亚洲精品在线观看| 欧美成人午夜激情| 久久九九全国免费精品观看| 欧美国产中文字幕| 欧美日韩国产精品专区| 国产美女久久精品香蕉69| 久久久精品国产一区二区| 亚洲免费av网址| 国产精品女人网站| 91影院在线免费观看视频| 这里只有精品视频在线| 国产欧美 在线欧美| 亚洲精品自拍视频| 久热99视频在线观看| 中文字幕日韩高清| 日韩免费av一区二区| 国产欧美一区二区三区久久人妖| 在线看福利67194| 欧美激情在线播放| 高清视频欧美一级| 亚洲女性裸体视频| 亚洲精品v天堂中文字幕| 亚洲福利小视频| 久久99视频免费| 久久亚洲综合国产精品99麻豆精品福利| 国产精品96久久久久久| 欧美日韩国产页| 亚洲精品乱码久久久久久金桔影视| 久久久久中文字幕2018| 永久免费精品影视网站| 91色在线视频| 黑人巨大精品欧美一区二区一视频| 亚洲精品一区二三区不卡| 精品二区三区线观看| 欧美在线视频观看| 亚洲xxxxx性| 亚洲成人中文字幕| 国产精品高清在线| 欧美三级免费观看| 亚洲人成电影网站色www| 欧美性理论片在线观看片免费| 91精品国产91久久| 国产一区二区三区直播精品电影| 精品国产91久久久久久老师| 北条麻妃99精品青青久久| 亚洲无限av看| 欧美日韩国产综合新一区| 亚洲免费影视第一页| 欧美日韩亚洲一区二| 一区二区亚洲精品国产| 97人洗澡人人免费公开视频碰碰碰| 国产精品美女www爽爽爽视频| 日韩国产高清污视频在线观看| 5278欧美一区二区三区| 欧美激情国内偷拍| 69久久夜色精品国产69乱青草| 欧美日韩ab片| 国产精品久久久久久搜索| 91精品国产99| 国产精品福利无圣光在线一区| 国产热re99久久6国产精品| 亚洲男人的天堂在线| 久久久久久一区二区三区| www.亚洲成人| 国产精品日韩在线| 亚洲成色777777女色窝| 欧美日韩美女在线观看| 亚洲肉体裸体xxxx137| 亚洲视频999| 亚洲无av在线中文字幕| 91精品国产综合久久男男| 国产视频久久久| 国语自产精品视频在线看抢先版图片| 最近2019年日本中文免费字幕| 日韩视频在线一区| 国产美女精彩久久| 精品性高朝久久久久久久| 91精品国产乱码久久久久久久久| 欧美人交a欧美精品| 久久中文字幕视频| 国产精品极品在线| 亚洲国产另类 国产精品国产免费| 亚洲国产欧美一区二区三区同亚洲| 国产精品无av码在线观看| 一本色道久久88精品综合| 日韩精品免费综合视频在线播放| 91wwwcom在线观看| 欧美激情按摩在线| 中文字幕9999| 精品美女国产在线| 一区二区三区国产在线观看| 日韩第一页在线| 日韩欧美国产激情| 国产精品男人爽免费视频1| 成人黄色免费在线观看| 国产人妖伪娘一区91| 日韩av在线天堂网| 国产98色在线| 精品福利免费观看| 国产成人精品av在线| 欧美日韩久久久久| 正在播放欧美一区| 91成品人片a无限观看| 97视频在线观看网址| 欧美激情综合色综合啪啪五月| 日韩成人久久久| 日韩亚洲欧美中文在线| 国产欧美中文字幕| 精品国偷自产在线视频99| 日产精品久久久一区二区福利| 亚洲综合色av| 国产成人综合亚洲| 欧洲午夜精品久久久| 一区二区三区天堂av| 国产在线观看精品一区二区三区|