比如我们需要在ViewController
里实现HeadView
的代理方法并且接收HeadView
里传回来的值.那么下面定义
在HeadView
里,我们定义好协议以及成为它的代理要实现的方法
注:Demo的场景为:HeadView里面有两个按钮,有不同的Tag,我们现在需要在ViewController里通过tag判断你在HeadView里点击了哪个按钮
/// 在class HeadView: UIView {} 方法前定义好协议以及代理方法
protocol DidselectedDelegate: NSObjectProtocol {
func returnDidSelectedItem(tag: NSInteger)
}
// returnDidSelectedItem(tag: NSInteger) 返回点击按钮的Tag值
class HeadView: UIView {
weak var delegate: didselectedDelegate? // 声明代理属性,方便"外来者"有成为它代理的入口 。注意要声明为weak类型
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.backgroundColor = UIColor.redColor()
}
// 通过代理属性,将 值传出去
@IBAction func onclick(sender: AnyObject) {
if delegate != nil {
delegate?.returnDidSelectedItem(sender.tag)
}
}
}
在ViewController里我们这样实现代理方法
class ViewController: UIViewController,DidselectedDelegate{ //声明遵守它的协议
override func viewDidLoad() {
super.viewDidLoad()
let headView:HeadView = NSBundle.mainBundle().loadNibNamed("HeadView", owner: nil, options: nil)[0] as! HeadView
headView.delegate = self
self.view.addSubview(headView)
}
}
场景: 接收headView上面因为操作实时改变传回ViewController的值,先声明你可以处理Headview
传回来的值.即你可以实现HeadView的代理方法. 并且成为它的代理
// 成为HeadVew的代理,就需要实现它声明的代理方法
func returnDidSelectedItem(tag: NSInteger) {
print("tag = \(tag)")
// HeadView通过代理属性传出来的值, 因为ViewController是它的代理,那么这个值就被ViewController接收了,接收之后就可以做相应的处理了
}
PS: 正在开始用swift做项目,有不熟的地方就记录一下.其实还是很好理解的.和OC基本没有差别