iOS-QQ好友列表 iOS 页面间几种传值方式(属性,代理,block,单例,通知)

主要是 点击按钮实现下拉 刷新数据

页面间传值

//
//  HMFriendsModel.h
//  QQ好友列表
//
//  Created by YaguangZhu on 15/9/1.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface HMFriendsModel : NSObject

@property(nonatomic,copy) NSString *name;

@property(nonatomic,copy) NSString *icon;

@property(nonatomic,copy) NSString *intro;

@property(nonatomic,assign,getter=isVip) BOOL vip ;

- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)friendsWithDict:(NSDictionary *)dict;
//+ (NSArray *)friends;

@end

//


//  HMFriendsModel.m


//  QQ好友列表


//


//  Created by YaguangZhu on 15/9/1.


//  Copyright (c) 2015年 YaguangZhu. All rights reserved.


//



#import "HMFriendsModel.h"



@implementation HMFriendsModel


- (instancetype)initWithDict:(NSDictionary *)dict


{


self = [super init];


if (self) {


[self setValuesForKeysWithDictionary:dict];


}


return self;


}



+ (instancetype)friendsWithDict:(NSDictionary *)dict


{


return [[self alloc] initWithDict:dict];


}



//+ (NSArray *)friends


//{


//    NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"friends.plist" ofType:nil]];


//    NSMutableArray *arrayM = [NSMutableArray array];


//    for (NSDictionary *dict in array) {


//        [arrayM addObject:[self friendsWithDict:dict]];


//    }


//


//    return arrayM;


//}



@end

 
//
//  HMFriendsGroupModel.h
//  QQ好友列表
//
//  Created by YaguangZhu on 15/9/1.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface HMFriendsGroupModel : NSObject

@property(nonatomic,strong) NSArray *friends;

@property(nonatomic,copy) NSString *name;

@property(nonatomic,assign) BOOL open;

@property(nonatomic,assign) int online;

- (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)friendsGroupWithDict:(NSDictionary *)dict;
//+ (NSArray *)friendsModel;

@end

//
//  HMFriendsGroupModel.m
//  QQ好友列表
//
//  Created by YaguangZhu on 15/9/1.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import "HMFriendsGroupModel.h"
#import "HMFriendsModel.h"
@implementation HMFriendsGroupModel

- (instancetype)initWithDict:(NSDictionary *)dict
{

    if (self = [super init]) {
        //注入所有值
        [self setValuesForKeysWithDictionary:dict];

        NSMutableArray *arr = [NSMutableArray array];
        for (NSDictionary *dict in self.friends) {
            HMFriendsModel *model = [HMFriendsModel friendsWithDict:dict];

            [arr addObject:model];

        }

        self.friends = arr;

    }
    return self;

//    self = [super init];
//    if (self) {
//        [self setValuesForKeysWithDictionary:dict];
//    }
//    return self;
}

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

//+ (NSArray *)friendsModel
//{
//    HMFriendsGroupModel *model =[[HMFriendsGroupModel alloc]init];
//    NSMutableArray *arrayM = [NSMutableArray array];
//
//            for (NSDictionary *dict in model.friends) {
//                HMFriendsModel *model = [HMFriendsModel friendsWithDict:dict];
//
//                [arrayM addObject:model];
//            }
//    model.friends =arrayM;
//
//    return arrayM;
//}

@end
//
//  HMHeaderView.h
//  QQ好友列表
//
//  Created by YaguangZhu on 15/9/5.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import <UIKit/UIKit.h>
@class HMHeaderView;

typedef void(^HMHeaderViewBlock)(id);

@protocol HMHeaderViewDelegate <NSObject>

@optional
- (void)headerView:(HMHeaderView *)view;

@end

@class HMFriendsGroupModel;
@interface HMHeaderView : UITableViewHeaderFooterView

+ (instancetype)headerViewWith:(UITableView *)tableview;

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

@property (nonatomic, strong)HMFriendsGroupModel *group;

@property (nonatomic, copy)HMHeaderViewBlock block;

@end

//
//  HMHeaderView.m
//  QQ好友列表
//
//  Created by YaguangZhu on 15/9/5.
//  Copyright (c) 2015年 YaguangZhu. All rights reserved.
//

#import "HMHeaderView.h"
#import "HMFriendsGroupModel.h"
@interface HMHeaderView ()

@property (nonatomic, weak)UIButton *nameBtn;

@property (nonatomic, weak)UILabel *textLbl;

@end

@implementation HMHeaderView

+ (instancetype)headerViewWith:(UITableView *)tableview
{

    static NSString *ID = @"headerView";
    //首先看缓存池中是否存在headerView,如果存在的 直接取出来用
    HMHeaderView *header = [tableview dequeueReusableHeaderFooterViewWithIdentifier:ID];

    if (header == nil) {
        //如果不存在   重新创建一个
        header = [[HMHeaderView alloc]initWithReuseIdentifier:ID];
    }

    return header;
}

- (void)setGroup:(HMFriendsGroupModel *)group
{

    //1. 必须做的操作
    _group = group;

    [self.nameBtn setTitle:group.name forState:UIControlStateNormal];

    //显示在线人数
    self.textLbl.text = [NSString stringWithFormat:@"%d/%d",group.online,group.friends.count];

}

//  当headerview 上子控件只需 做一次操作的  或者  要显示出来的    就写在以下方法中
- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier
{
    if (self = [super initWithReuseIdentifier:reuseIdentifier]) {

        // Custom  相当  [[UIButton alloc]init];
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
        //btn 上面有一个imageView
        [btn setImage:[UIImage imageNamed:@"buddy_header_arrow"] forState:UIControlStateNormal];
        [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        //设置按钮内容的居左显示
        btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
        //设置按钮的内边距
        btn.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
        //设置按钮 label 的 内边距
        btn.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
        //按钮内部 imageview 的内边距
        //        btn.imageEdgeInsets
        //居中显示
        btn.imageView.contentMode = UIViewContentModeCenter;

        //不予许剪切超出部分
        btn.imageView.clipsToBounds = NO;

        [btn addTarget:self action:@selector(nameBtnClick) forControlEvents:UIControlEventTouchUpInside];

        [self addSubview:btn];
        self.nameBtn = btn;

        NSLog(@"---------%@",NSStringFromCGRect(self.contentView.frame));

        UILabel *lable = [[UILabel alloc]init];

        //居右显示
        lable.textAlignment = NSTextAlignmentRight;

        [self.contentView addSubview:lable];

        self.textLbl = lable;

    }

    return self;
}

/**
 *  当 当前的view 的frame 发生一些改变的时候  调用次方法  重新布局  内部的子控件
 */
- (void)layoutSubviews
{
    self.nameBtn.frame = self.bounds;
    //获取屏幕的宽度
    //    CGFloat screenW = [[UIScreen mainScreen] bounds].size.width;

    CGFloat lblY = 0;
    CGFloat lblW = 150;
    CGFloat lblh = self.frame.size.height;
    CGFloat lblX = self.frame.size.width - lblW - 10;

    self.textLbl.frame = CGRectMake(lblX, lblY, lblW, lblh);

}

/**
 *  代理方法
 */
- (void)nameBtnClick
{
    self.group.open = !self.group.open;

//        if ([self.delegate respondsToSelector:@selector(headerView:)]) {
//            [self.delegate headerView:self];
//        }
//
//
//
//
//    if (self.block) {
//        self.block(self);
//    }

//
   [[NSNotificationCenter defaultCenter] postNotificationName:@"friend" object:self userInfo:nil];

    NSLog(@"----------------");
}

/**
 *  当 当前的view 加载到父控件的时候调用
 */
- (void)didMoveToSuperview
{

    //每次当控件加载到父控件的时候都会调用这个方法,包括init 完一次就会调用一次
    if (self.group.open) {
        self.nameBtn.imageView.transform = CGAffineTransformMakeRotation(M_PI_2);

        NSLog(@"999999999");

    }else{
        self.nameBtn.imageView.transform = CGAffineTransformMakeRotation(0);
    }

}

@end
时间: 2024-10-07 02:10:07

iOS-QQ好友列表 iOS 页面间几种传值方式(属性,代理,block,单例,通知)的相关文章

iOS 页面间几种传值方式(属性,代理,block,单例,通知)

iOS 页面间几种传值方式(属性,代理,block,单例,通知) 姜糖水 2015-05-03 52 阅读 iOS 移动开发 第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五

iOS 页面间几种传值方式(属性,代理,block,单例,通知)

第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五种传值方式: (一)属性传值 第二个界面中的lable显示第一个界面textField中的文本 首先我们建立一个RootVie

MVC页面常见三种传值方式——ViewData,ViewBag,TempData

最近接触MVC代码多了,发现了很多新东西,比如页面传值.发现了MVC里面原来有这么多对象可以用来传值,最近两天用到了ViewData和ViewBag,之后又关联到了TempData,现在列个表格比较下: 用过之后,个人感觉还是ViewBag最好用,直接属性赋值就可以了,但是ViewData和TempData又有它们的优势,在使用的时候,可以根据要传递数据的大小,是从Controller向Views里面传递数据,还是Controller传递数据...综合考虑各种因素再做决定吧. 除了这三种比较常见

iOS TableView实现QQ好友列表(三)

上节我们讲到如何展示好友信息 iOS TableView实现QQ好友列表(二) http://blog.csdn.net/lwjok2007/article/details/46549111 接下来我们将分组点击的时候折叠起来. 首先新建一个可变字典用来存储当前列表是否展示 NSMutableArray *selectedArr;//控制列表是否被打开 selectedArr=[[NSMutableArray alloc]init]; 根据前两节所讲,我们讲分组名称放在section的heade

[iOS基础控件 - 6.9.3] QQ好友列表Demo TableView

A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组 B.实现步骤 1.编写MVC结构 (1)根据plist文件结构,编写model,使用嵌套型 1 // 2 // FriendGroup.h 3 // FriendsList 4 // 5 // Created by hellovoidworld on 14/12/12. 6 // Copyright (c) 2014

【iOS基础控件 - 13】【Demo 】QQ好友列表TableView

A.需求 1.使用plist数据,展示类似QQ好友列表的分组.组内成员显示缩进功能 2.组名使用Header,展示箭头图标.组名.组内人数和上线人数 3.点击组名,伸展.缩回好友组 code source: B.实现步骤 1.编写MVC结构 (1)根据plist文件结构,编写model,使用嵌套型 1 // 2 // FriendGroup.h 3 // FriendsList 4 // 5 // Created by hellovoidworld on 14/12/12. 6 // Copyr

UI基础--UITableView实现仿QQ好友列表页面

需求:类似于QQ好友列表页面的显示,有好友分组,有好友数量,在线人数,vip会员.展开分组时显示分组好友,合并分组时不显示:具体效果图如下: 分析: 1.展开分组时显示分组好友,该功能可以使用显示UITableViewCell的数据即可: 2.分组头可以考虑使用一个headerView来实现: 示例文件结构: 具体实现步骤: 1.自定义数据模型类,由于plist文件中包含了2个字典,所以需要写2个数据模型: 2.自定义cell,属性包括数据模型以及生成可重用cell的方法,由于系统自带的子控件即

iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例)

实现了以下iOS页面间传值:1.委托delegate方式:2.通知notification方式:3.block方式:4.UserDefault或者文件方式:5.单例模式方式:6.通过设置属性,实现页面间传值 在iOS开发中,我们经常会遇到页面间跳转传值的问题,现归纳总结一下: 情况1:A页面跳转到B页面 方法: 在B页面的控制器中,编写对应的属性,在A页面跳转到B页面的地方,给B的属性赋值即可 //SecondViewController.h @property(nonatomic) NSInt

仿QQ好友列表界面的实现

TableView有2种style:UITableViewStylePlain 和 UITableViewStyleGrouped. 但是QQ好友列表的tableView给人的感觉似乎是2个style效果都有,但是tableView不能实现2种效果同时存在. 其实只是用到了Plain这个style,只是在cell的个数显示上做了个处理(个人见解,希望可以帮到有需要的人.....) 当通讯录那一组的cell的组头视图中的button是普通状态下的时候,并不是不显示cell,而是显示一个没有任何内容