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 来 ...
随机推荐
- 利用UIActivityController调用ios系统自带的分享功能,实现微信发布多图的功能
通过一番查找以后找到一个类UIActivityController,可以调用系统的social.framework中的分享接口.看下面的图就知道了,这个还是挺常见的 微信发布多图 借鉴了CSDN上的一 ...
- Mahout 介绍
1.Hbase+k-means (G级别) 2.k-means+mr (T级别) 1. 2.canopy 2.贝叶斯算法 决策,分类,文档分类 3.推荐系统 4.图书推荐系统 1.需求 付完款的用户 ...
- 将json返回的日期格式转换
<script> function ChangeDateFormat(cellval) { var date = new Date(parseInt ...
- 转:利用node压缩、合并js,css,图片
1.安装nodejs http://nodejs.org/ 2.安装各自的node package js我用的是UglifyJS github地址:https://github.com/mishoo/ ...
- Android入门之GPS定位详解
一.LocationManager LocationMangager,位置管理器.要想操作定位相关设备,必须先定义个LocationManager. LocationManger locationMa ...
- .net获取周几(中文)
DateTime.Now.ToString("yyyy年MM月dd日 星期ddd hh时mm分ss秒", new System.Globalization.CultureInfo( ...
- 在 Ubuntu 16.04 上安装 LEMP 环境之图文向导
导读 LEMP 是个缩写,代表一组软件包(注解 ① L:Linux OS,E:Nginx 网络服务器,M:MySQL/MariaDB 数据库和 P:PHP 服务端动态编程语言),它被用来搭建动态的网络 ...
- [HDU4507]吉哥系列故事——恨7不成妻
[HDU4507]吉哥系列故事--恨7不成妻 试题描述 单身!依然单身!吉哥依然单身!DS级码农吉哥依然单身!所以,他生平最恨情人节,不管是214还是77,他都讨厌!吉哥观察了214和77这两个数,发 ...
- 跟着百度学PHP[4]OOP面对对象编程-17-多态
多态是除封装和继承之外的另一个面象对象的三大特性之一. 多态的作用简而言之就是为程序做括展. 比如说在公司上班,每个月财务发放工资,同一个发工资的方法,在公司内不同的员工或是不同职位的员工,都是通过这 ...
- windows下php,redis配置
在windows环境下搭建redis是一般是为了测试,官方redis并没有给windows版redis但是微软有. windows版下载地址:https://github.com/MSOpenTech ...