ios代理设计模式

代理设计模式的作用:
     1.A对象监听B对象的一些行为,A成为B的代理
     2.B对象想告诉A对象一些事情,A成为B的代理
   代理设计模式的总结:
     如果你想监听别人的一些行为,那么你就要成为别人的代理
     如果你想告诉别人一些事情,那么就让别人成为你的代理
     
    代理设计模式的开发步骤
     1.拟一份协议(协议名字的格式:控件名 + Delegate),在协议里面声明一些代理方法(一般代理方法都是@optional)
     2.声明一个代理属性:@property (nonatomic, weak) id<代理协议> delegate;
     3.在内部发生某些行为时,调用代理对应的代理方法,通知代理内部发生什么事
     4.设置代理:xxx.delegate = yyy;
     5.yyy对象遵守协议,实现代理方法

 1 #import <UIKit/UIKit.h>
 2
 3 @class XMGLoadMoreFooter;
 4
 5 @protocol XMGLoadMoreFooterDelegate <NSObject>
 6 @optional//不写@optional默认为必须实现的代理方法
 7 //代理方法一般以类名开头,传入被监听的控件对象
 8 - (void)loadMoreFooterDidClickLoadMoreButton:(XMGLoadMoreFooter *)footer;
 9 @end
10
11 @interface XMGLoadMoreFooter : UIView
12 + (instancetype)footer;
13 //代理属性用weak修饰,id类型代表任何类都可以作为代理,在<>中指明要实现的协议名称
14 @property (nonatomic, weak) id<XMGLoadMoreFooterDelegate> delegate;
15
16 /**
17  * 结束加载状态
18  */
19 - (void)endLoading;
20 @end

h文件

 1 //
 2 //  XMGLoadMoreFooter.m
 3 //  06-自定义等高cell01-storyboard
 4 //
 5 //  Created by xiaomage on 15/6/6.
 6 //  Copyright (c) 2015年 小码哥. All rights reserved.
 7 //
 8
 9 #import "XMGLoadMoreFooter.h"
10 #import "XMGDealsViewController.h"
11
12 @interface XMGLoadMoreFooter()
13 @property (weak, nonatomic) IBOutlet UIButton *loadMoreButton;
14 @property (weak, nonatomic) IBOutlet UIView *loadingMoreView;
15 @end
16
17 @implementation XMGLoadMoreFooter
18
19 + (instancetype)footer
20 {
21     return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];
22 }
23
24 /**
25  * 点击了加载更多
26  */
27 - (IBAction)loadMore {
28     self.loadMoreButton.hidden = YES;
29     self.loadingMoreView.hidden = NO;
30
31     // 告诉代理,非必须实现的代理方法先判断下是否被代理类实现,
32 //在内部发生某些行为时调用代理对应的代理方法,通知代理发生了什么事
33     if ([self.delegate respondsToSelector:@selector(loadMoreFooterDidClickLoadMoreButton:)]) {
34         [self.delegate loadMoreFooterDidClickLoadMoreButton:self];
35     }
36 }
37
38 /**
39  * 结束加载状态
40  */
41 - (void)endLoading
42 {
43     self.loadMoreButton.hidden = NO;
44     self.loadingMoreView.hidden = YES;
45 }
46
47 @end

m文件

  1 //
  2 //  XMGDealsViewController.m
  3 //  06-自定义等高cell01-storyboard
  4 //
  5 //  Created by xiaomage on 15/6/2.
  6 //  Copyright (c) 2015年 小码哥. All rights reserved.
  7 //
  8
  9 #import "XMGDealsViewController.h"
 10 #import "XMGDeal.h"
 11 #import "XMGDealCell.h"
 12 #import "XMGPageView.h"
 13 #import "XMGLoadMoreFooter.h"
 14
 15 @interface XMGDealsViewController () <XMGLoadMoreFooterDelegate>
 16 /** 所有的团购数据 */
 17 @property (nonatomic, strong) NSMutableArray *deals;
 18 @end
 19
 20 @implementation XMGDealsViewController
 21
 22 /**
 23     * 代理设计模式的作用:
 24     * 1.A对象监听B对象的一些行为,A成为B的代理
 25     * 2.B对象想告诉A对象一些事情,A成为B的代理
 26     *
 27     * 代理设计模式的总结:
 28     * 如果你想监听别人的一些行为,那么你就要成为别人的代理
 29     * 如果你想告诉别人一些事情,那么就让别人成为你的代理
 30     *
 31     * 代理设计模式的开发步骤
 32     * 1.拟一份协议(协议名字的格式:控件名 + Delegate),在协议里面声明一些代理方法(一般代理方法都是@optional)
 33     * 2.声明一个代理属性:@property (nonatomic, weak) id<代理协议> delegate;
 34     * 3.在内部发生某些行为时,调用代理对应的代理方法,通知代理内部发生什么事
 35     * 4.设置代理:xxx.delegate = yyy;
 36     * 5.yyy对象遵守协议,实现代理方法
 37  */
 38
 39 - (NSMutableArray *)deals
 40 {
 41     if (_deals == nil) {
 42         // 加载plist中的字典数组
 43         NSString *path = [[NSBundle mainBundle] pathForResource:@"deals.plist" ofType:nil];
 44         NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
 45
 46         // 字典数组 -> 模型数组
 47         NSMutableArray *dealArray = [NSMutableArray array];
 48         for (NSDictionary *dict in dictArray) {
 49             XMGDeal *deal = [XMGDeal dealWithDict:dict];
 50             [dealArray addObject:deal];
 51         }
 52
 53         _deals = dealArray;
 54     }
 55     return _deals;
 56 }
 57
 58
 59 - (void)viewDidLoad {
 60     [super viewDidLoad];
 61
 62     // 设计模式:代理设计模式
 63
 64     XMGLoadMoreFooter *footer = [XMGLoadMoreFooter footer];
 65     footer.delegate = self;
 66     self.tableView.tableFooterView = footer;
 67
 68     XMGPageView *pageView = [XMGPageView pageView];
 69     pageView.imageNames = @[@"2c97690e72365e38e3e2a95b934b8dd2", @"2c97690e72365e38e3e2a95b934b8dd2", @"2c97690e72365e38e3e2a95b934b8dd2", @"2c97690e72365e38e3e2a95b934b8dd2"];
 70     self.tableView.tableHeaderView = pageView;
 71 }
 72
 73 #pragma mark - <XMGLoadMoreFooterDelegate>
 74 - (void)loadMoreFooterDidClickLoadMoreButton:(XMGLoadMoreFooter *)footer
 75 {
 76     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
 77         // 加载数据
 78         XMGDeal *deal = [[XMGDeal alloc] init];
 79         deal.icon = @"2c97690e72365e38e3e2a95b934b8dd2";
 80         deal.title = @"xxxx";
 81         deal.price = @"6546";
 82         deal.buyCount = @"90";
 83         [self.deals addObject:deal];
 84
 85         // 刷新表格
 86         [self.tableView reloadData];
 87
 88         // 结束footer的加载状态
 89         XMGLoadMoreFooter *footer = (XMGLoadMoreFooter *)self.tableView.tableFooterView;
 90         [footer endLoading];
 91     });
 92 }
 93
 94 #pragma mark - Table view data source
 95 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
 96     return self.deals.count;
 97 }
 98
 99 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
100     // 创建cell
101     XMGDealCell *cell = [XMGDealCell cellWithTableView:tableView];
102
103     // 取出模型数据
104     cell.deal = self.deals[indexPath.row];
105
106     return cell;
107 }
108
109 @end

实现代理

时间: 2024-11-16 17:36:26

ios代理设计模式的相关文章

你真的了解iOS代理设计模式吗?

OS中消息传递方式 在iOS中有很多种消息传递方式,这里先简单介绍一下各种消息传递方式. 通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式. 代理:是一种通用的设计模式,iOS中对代理支持的很好,由代理对象.委托者.协议三部分组成. block:iOS4.0中引入的一种回调方法,可以将回调处理代码直接写在block代码块中,看起来逻辑清晰代码整齐. target action:通过将对象传递到另一个类中,在另一个类中将该对象当做target的方式,来调用该对象方法,从

iOS 代理设计模式的应用——反向传值

设计一个代理模式需要六个步骤: 一.首先要先弄清楚谁是委托方,谁是代理方. a.委托方和代理方是不分开的,所以互相引用对方的头文件 二.委托方:声明一个委托协议 a.既然是委托协议,那就必须在委托方的类中声明.类似一个公告,既然是要让别人知道的,所以自然就是在.h文件中声明. b.只需声明要做的是什么,不需要告诉代理要怎么做.也就是说只要声明一个方法,不需要实现方法. 上代码: 三.委托方:声明一个委托代理属性 a.声明的作用就是给代理方提供一个接口拿到代理权,没有这个声明,就算能看到委托方的委

IOS之Objective-C学习 代理设计模式

鉴于Objective-C是不支持多继承的,所以需要用协议来代替实现其他类的方法,所以有了代理设计模式. 代理,又称委托,delegation. 代理模式可以让一个单继承的类实现父类以外其他类的方法.代理也可以用于传值. 我们先来说说原理,最后再看看是如何传值的. 如图选取Objective-C File并选择Protocol创建文件后在该协议文件中写入方法. myProtocol.h @protocol myDelegation <NSObject> -(void)method1; -(vo

iOS开发设计模式之代理

代理设计模式 代理设计模式,也称"委托",顾名思义就是委托别人去做事情 在代理模式中,一方称为委托方,另一方称为代理方. 委托方和代理方通过协议联系到一起. 当委托方想要让代理方做事情时只需向代理发送代理消息 代理的作用: 1)对象间传递事件 :孩子告诉妈妈饿了 2)对象间传递数值 :告诉妈妈饿了的同时告诉想吃什么 代理方法中使用参数 3)为自身的属性赋值 :孩子告诉妈妈饿了同时要得到妈妈做的食物 代理方法中使用返回值 代理设计模式的使用步骤 委托方:提出代理协议 @protocol 

iOS常用设计模式和机制之代理

Delegate : 1 代理设计模式的使用我们首先需要明白三个要素 *委托方:委托别人去执行某些操作的人(对象) *代理方:被委托区执行某些操作的人(对象) *协议:(protocol)委托方需要代理方执行的操作 > 协议是一套标准(一堆方法的声明),只有 .h 文件.协议的定义以 @protocol 开始,以 @end 结束. > 协议中的方法默认是必须实现的,@required .关键字 @optional 修饰的方法是可选的,课实现也可不实现. 2 delegate 的设计步骤 步骤1

自学iOS开发小功能之五:代理设计模式以及书写规范

一.基本概念 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 代理设计模式:我们买电饭锅之类的,不会亲自到厂家去买,而是在商超等地方购买,而商超就是厂家的代理 应用场合:1.对象B想监听对象A的行为,让对象B成为对象A的代理   2.对象A

iOS 代理反向传值

在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳转到界面B,在界面B的输入框中输入字符串,在界面A的label上显示.这是一个典型的反向传值的例子.这个例子的核心是:"在界面B的输入框中输入字符串,在界面A的label上显示".也就是说:"界面B委托界面A显示字符串,页面A是界面B的代理".委托方向代理方反向传值. 那么我们该怎么用代理设

代理设计模式(转)

委托(delegate)也叫代理是iOS开发中常用的设计模式.我们借助于protocol(参考博文:objective-c协议(protocol))可以很方便的实现这种设计模式. 什么是代理? 苹果的官方文档给了很清晰的解释: Delegation is a simple and powerful pattern in which one object in a program acts on behalf of, or in coordination with, another object.

代理设计模式

1. 什么是设计模式 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.毫无疑问,设计模式于己于他人于系统都是多赢的:设计模式使代码编制真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 什么是代理设计模式 生活中大家一定遇到这样的情况了:比如说我要买一包纸,不妨就是心相印的吧,那一般人的话我应该不是去心相印的工厂里面直接去买吧,而是我们在心相印专卖店或者什