IOS-委托代理(degegate)
委托代理:
委托代理(degegate)顾名思义,把某个对象要做的事情委托给别的对象去做。那么别的对象就是这个对象的代理,代替它来打理要做的事。反映到程序中, 首先要明确一个对象的委托方是哪个对象,委托所做的内容是什么。委托机制在很多语言中都用到的,这只是个通用的思想,网上会有很多关于这方面的介绍。 那么在苹果开发过程中,用到委托的程序实现思想如下,我主要拿如何在视图之间传输信息做个例子。譬如:在两个页面(UIView视 图对象)实现传值,用委托(delegate)可以很好做到。
代理设计模式
1.使用场合:
1> 当A对象发生了一些事情,想告诉B对象,就让B对象成为A对象的代理
2> B对象想监听A对象发生的一些事情,就让B对象成为A对象的代理
2.步骤
1> 定义一份代理协议(比如QQGroupHeaderDelegate)(等着代理对象去实现)
* 协议名都以控件的类名开头,比如QQGroupHeader的代理协议叫做QQGroupHeaderDelegate
* 协议里面的方法一般都不强制代理去实现,所以方法前面加上@optional
* 协议里面的方法名都以类名开头(但是不加前缀,比如QQGroupHeader的代理方法都是以groupHeader开头)
* 协议里面的方法必须能传入控件本身这个参数
2> 定义一个代理属性
@property (nonatomic, weak) id<QQGroupHeaderDelegate> delegate;
3> 设置代理属性(代理用weak)
header.delegate = controller;
4> 通知代理
* 先检测代理有没有实现对应的代理方法
if ([_delegate respondsToSelector:@selector(groupHeaderClick:)]) {
[_delegate groupHeaderClick:self];
}
5> 一段实例代码
1. 定义一分协议
@class HGStageView;
@protocol HGStageViewDelegate <NSObject>
//@required的表示这个方法必须实现,否则将会得到编译器的警告,而@optional 为可选实现,为默认值
@optional
// 一般将自己传出去,它的代理好获得相应的值
- (void)stageViewIconClick:(HGStageView *)stageView;
@end
2. 让代理成为自己的属性
// 代理一般用weak
@property (nonatomic, weak) id<HGStageViewDelegate> delegate;
3.触发代理事件通知代理
#pragma mark 点击了LOGO
- (IBAction)iconClick {
if ([_delegate respondsToSelector:@selector(stageViewIconClick:)]) {
[_delegate stageViewIconClick:self];
}
}
4.遵守代理协议
@interface HGStagesViewController () <HGStageViewDelegate>
5.实现代理方法
#pragma mark - stageView的代理方法
- (void)stageViewIconClick:(HGStageView *)stageView
{
// 执行对应的线,并且传递模型数据(sender对应的模型数据会传给prepareForSegue方法的sender参数)
[self performSegueWithIdentifier:@"stages2ready" sender:stageView.stage];
}
IOS-委托代理(degegate)的更多相关文章
- IOS 委托代理(delegate)实现页面传值
LvesLi原创,转载请注明原文链接谢谢 http://www.androiddev.net/lvesli_delegate/ 委托是指给一个对象提供机会对另一对象中的变化做出反应或者相应另一个对 ...
- 【转】iOS开发-Protocol协议及委托代理(Delegate)传值
原文网址:http://www.cnblogs.com/GarveyCalvin/p/4210828.html 前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来 ...
- iOS开发-Protocol协议及委托代理(Delegate)传值
前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但 ...
- iOS开发 - Protocol协议及委托代理(Delegate)
因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但具体怎 ...
- iOS面试题集锦
一.前言部分 文中的问题多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.怎样防止指针的越界使用问题? 答案: 1 .防止数组越界,必须让指针指向一个有效的内存地址, 2. 防止向一块内存中拷 ...
- iOS通知的使用
注册:[[NSNotificationCenter defaultCenter] postNotificationName:@"changeColor" object:self]; ...
- iOS当中一些常见的面试题
转自各方面..... 一.前言部分 文中的问题多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.iOS9有哪些新特性? 答案: 1)改进了 Siri 基于日期.位置和相簿名称来搜索个人照片和视 ...
- IOS学习之路--OC的基础知识
1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...
- iOS求职之OC面试题
1.Objective-C的类可以多重继承么?可以采用多个协议么? 答:不可以多重继承,可以采用多个协议. 2.#import和#include的区别是什么?#import<> 跟 #im ...
- ios面试题集锦(一)
一.前言部分 文中的问题多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.iOS9有哪些新特性? 答案: 1)改进了 Siri 基于日期.位置和相簿名称来搜索个人照片和视频 要求 Siri 来 ...
随机推荐
- 黄学长模拟day1 某种密码
关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY.若KEY=∑▒[Ai*Bi],则密文就是原文的一组合法密码. 现在有原 ...
- 繁华模拟赛day8 字典序
/* 这个题要我们求一个字典序,字符串给出的顺序,会对字母的字典序前后相对顺序进行限定,如何用来表示这种限定,我们注意到这种一个之后接着一个,只有先输出他前面的才能输出他,很明显就是拓扑排序,最小方案 ...
- PHPCMS V9多站点[站群功能]动态设置与静态设置子站内容URL
今天我们来讲解下 PHPCMS V9的站群功能的 动态站点与静态站点的配置 站群站点,分为动态站点,和静态站点两种设置方法: 静态的,就是将栏目和内容都了HTML 文件,我们先讲解下,站群的操作: 建 ...
- FadeTop – 定时休息提醒工具
FadeTop 是款定时休息提醒工具,其特色是当设定时间到达时,将桌面渐变为指定的颜色,强制提醒但不影响桌面的任何操作 FadeTop is a visual break reminder for W ...
- Android快速开发系列 10个常用工具类
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自[张鸿洋的博客] 打开大家手上的项目,基本都会有一大批的辅 ...
- Android工程文件下assets文件夹与res文件夹的区别
1.assets:不会在R.java文件下生成相应的标记,assets文件夹可以自己创建文件夹,必须使用AssetsManager类进行访问,存放到这里的资源在运行打包的时候都会打入程序安装包中, 2 ...
- gradle类重复的问题解决方法
今天遇到一个gradle的类重复问题,学习到一个命令 gradle -q dependencies,可以查看项目里包的依赖关系,发生这个错误是因为我用了一个相册的项目,这个项目里用到了v4包,我自己的 ...
- linux shell脚本常用语句
linux shell 指令 诸如-d, -f, -e之类的判断表达式: 文件比较运算符-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]-d ...
- 编写Delphi控件属性Stored和Default的理解及应用
property ButtonSize: Integer read FButtonSize write SetButtonSize default 0; property Color: TCol ...
- python self introspection
http://www.ibm.com/developerworks/cn/linux/l-pyint/index1.html