Swift代理

举例说明,如果在自定义的View里要让页面返回上一页,view做不到只能求助于ViewController,那么就需要在View里创建一个代理,让ViewController完成代理方法。代码中红色标记为代理相关语句。

1.在View中创建代理:

import UIKit

protocol InputCompleteDelegate {
    func createNewData(data: Array<String>)
    func cancelCreateData()
}

class InputView: UIView {

    var button:UIButton
    var completeDelegate : InputCompleteDelegate?

    override init(frame: CGRect) {
        super.init(frame:frame)

       //比如在点击button返回上一页面

      button.addTarget(self, action: #selector(creatAction(sender:)), for: UIControlEvents.touchUpInside)
    }
    
    required init?(coder aDecoder: NSCoder) {
       super.init(coder: aDecoder)
    }

    @objc func creatAction(sender: UIButton) {
            self.completeDelegate?.cancelCreateData()//点击button调用代理方法
    }

}

2.在ViewController中实现代理方法:

import UIKit

class TargetViewController: UIViewController, InputCompleteDelegate {
    
    var inputV = InputView()
    
    override func viewDidLoad() {
        super.viewDidLoad()

       //设置代理为self
        inputV.completeDelegate = self as InputCompleteDelegate
    }
    
    func createNewData(data: Array<String>) {
        
    }

    

//实现返回上一页代理方法
    func cancelCreateData() {
        self.navigationController?.popViewController(animated: true)
    }
    
}

猜你喜欢

转载自blog.csdn.net/weixin_42012181/article/details/81559796