Delegate委托的使用
Delegate委托的使用
委托的说明
委托(delegate)是Cocoa的一个术语,表示将一个对象的部分功能转交给另一个对象。
比如对象A希望对象B知道将要发生或已经发生某件事情,对象A可以把对象B的引用存为一个实例变量。这个对象B称为委托。当事件发生时,它检查委托对象是否实现了与该事件相适应的方法。如果已经实现,则调用该方法。
由于松耦合的原因,一个对象能成为多个对象的委托。某些情况下,相较于通过继承让子类实现相关的处理方法,可以有效减少代码复杂度。所以iOS中也大量的使用了委托。
委托的实例
//定义个协议
protocol loadingDeleagte {func didLoading(text: String)
}
class HomeViewController: UIViewController {@IBOutlet weak var textFlied: UITextField!//2.声明一个委托代理var delegate: loadingDeleagte?override func viewDidLoad() {super.viewDidLoad()}@IBAction func backBtnClick(_ sender: AnyObject) {print("点击了")//3实例一个 ViewController类let loading = ViewController()//指定委托代理是 loading 的实例delegate = loading//调用委托实现的协议方法delegate?.didLoading(text: textFlied.text!)}override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {UIApplication.shared.keyWindow?.endEditing(true)}override func didReceiveMemoryWarning() {super.didReceiveMemoryWarning()// Dispose of any resources that can be recreated.}}
import UIKitclass ViewController: UIViewController {@IBOutlet weak var textLable: UILabel!@IBOutlet weak var NextBtn: UIButton!override func viewDidLoad() {super.viewDidLoad()}}//4实现LoadingDelegate协议
extension ViewController : loadingDeleagte {func didLoading(text: String) {print(text)//值已经传过来了}
}
实际开发中容易遇到的问题
- 实际开发中容易遇到的问题
1.新建的另一个页面的的controller对象,不是要跳转的页面的controller。
2.delegate没有设置好,导致获取不到对应controller的控件 - 关键解决方法:
//获取到对应页面的controller
let secondView = self.storyboard?.instantiateViewController(withIdentifier: "second") as! addTagsViewController//设置secondView中的代理为当前ViewController自身secondView.delegate=selfself.navigationController!.pushViewController(secondView,animated:true)
secondView中传值回去
if((delegate)) != nil{delegate?.didLoading(text: "传值回去")self.navigationController?.popViewController(animated: true)
参考资料
http://www.hangge.com/blog/cache/detail_810.html
https://www.cnblogs.com/ningmengcao-ios/p/5952872.html
Delegate委托的使用相关推荐
- Strategy模式与Delegate委托
Strategy模式是对算法的封装.即使是一个计算行为,如果其实现有其多样性,为达到易扩展的目的,我们也有必要将其抽象出来,以接口的形式来定义.由于充分利用了面向对象的多态性,在调用该行为时,其具体的 ...
- delegate委托
delegate委托: 三个概念: C# 中的委托类似于 C 或 C++ 中的函数指针. 委托是面向对象.类型安全的,并且是安全的. 委托和接口的类似之处是:它们都允许分隔规范和实现. 一个原则: 被 ...
- C# Delegate(委托)与多线程
C# Delegate(委托)与多线程 很多时候写windows程序都需要结合多线程,在.net中用如下得代码来创建并启动一个新的线程. public void ThreadProc(); ...
- 【C#学习】delegate(委托) 和 event(事件)
C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变.在C#中方法不能作为参数直接传递,必须 ...
- 转:终于会用c#中的delegate(委托)和event(事件)了
第一个例子: public class DelegateTest {// 声明delegate对象 public delegate void CompareDelegate(int a,int b); ...
- UE4 C++:Delegate委托
目录 概念 定义 声明委托 单播委托 声明宏 绑定委托 执行函数 用法示例 不带参数Delegate 带参数Delegate 传递有效负载数据 多播委托 声明宏 绑定多播委托 多播执行 动态委托 声明 ...
- C#学习基本概念之关键字---delegate(委托)
委托类型的声明与方法签名相似, 有一个返回值和任意数目任意类型的参数: public delegate void TestDelegate(string message); public deleg ...
- Csharp关键字----delegate(委托)
Delegate类简介 ------------------------ 命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 委托(Delegate)类是一 ...
- delegate 委托方法
一先定义一个委托方法 ---------第一个类XX //定议委托 public event ordinary Ordinary; //定议委托方法 public delegate void ordi ...
最新文章
- 无需重启, 使用Xephyr调试awesome
- 使用tensorflow serving部署keras模型(tensorflow 2.0.0)
- iptables复习记忆
- zoj 3747 (DP)(连续至多,连续至少)
- 10个非常有用的CSS hack和技术
- 【渝粤教育】广东开放大学 计量经济学 形成性考核 (21)
- oracle job 与存储过程,应用oracle job和存储过程
- bash ./php-memcache.sh,PHP+shell脚本操作Memcached和Apache Status的实例分享
- 从双层优化视角理解对抗网络GAN
- html搞笑注释,9个最有趣的代码注释
- python必须下载到c盘吗_python为什么要安装到c盘
- C语言为四维数组申请动态内存空间的方法(一)
- Delphi 与 DirectX 之 DelphiX(63): TDIB.DoPosterize();
- ElasticSearch常用的几种查询方式
- [渝粤教育] 南京航空航天大学 航空航天材料概论 参考 资料
- 数字图像处理 离散余弦变换(DCT)和峰值信噪比(PSNR)
- 企业业务逻辑常见风险
- xmind8 下载安装与破解激活
- 一:【博客分享】优秀的有趣的博客
- Input输入框的失焦
热门文章
- m基于RBF神经网络和BP神经网络的信道估计误码率matlab仿真
- Oracle 的表分区详解
- 为什么淘宝搜索宝贝排名先后不一样,原理是什么?
- flash模板 超级链接该如何加
- VMware ESXi启动卡在 vmkibft loaded successfully
- pandownload + speedpan下载器 tampermonkey + IDM下载器
- 【学习】如何制作手机端html模板(REM的实际应用)
- matlab编程与最优化设计应用,MATLAB编程与最优化设计应用
- 【个人记录】torch转onnx对上TensorRT的grid_sample接口(4D/5D)进行加速
- 【游戏编程扯淡精粹】工作两年总结