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 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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值