美文网首页
Delegate委托的使用

Delegate委托的使用

作者: 雅风丶 | 来源:发表于2018-07-17 19:18 被阅读0次

委托的说明

委托(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 UIKit

class 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=self
        self.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委托的使用

    委托的说明 委托(delegate)是Cocoa的一个术语,表示将一个对象的部分功能转交给另一个对象。 比如对象A...

  • Proxy和的delegate区别

    Proxy和的delegate区别 在ios中使用proxy代理模式,经常容易和delegate委托模式混淆。 委...

  • 运算符重载 高阶函数

    委托属性class Foo{var p:Type by Delegate()} 使用委托属性: 惰性初始化 和 b...

  • 52个有效方法(23) - 通过委托与数据协议进行对象间的通信

    委托模式(Delegate pattern) 委托模式(Delegate pattern):用来实现对象间的通信 ...

  • C#委托Delegate和事件Event实战应用

    一、委托的概念 C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate)是...

  • C# 高级语言总结

    后续 1 C# 委托 委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 ...

  • delegate

    什么是 delegate delegate是委托模式.委托模式是将一件属于委托者做的事情,交给另外一个被委托者来处...

  • iOS 逆向传值

    代理(delegate)、通知(NSNotification),block等等。 1、委托代理delegate只能...

  • C# 委托

    C#委托 C#中的委托(Delegate)类似于C或C++中函数的指针。委托(Delegate)是存有对某个方法的...

  • Delegate(委托)

    上一个章节走了一遍 ViewController 和 TableView 的流程,这章节开始走一遍 Delegat...

网友评论

      本文标题:Delegate委托的使用

      本文链接:https://www.haomeiwen.com/subject/iybgpftx.html