举例说明,如果在自定义的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)
}
}