iOS委托和协议

还记得刚开始学iOS的时候死活没明白所谓协议(Protocol)和委托(Delegate)的用法和背后的思路。今天终于自己写了一个Protocol和Delegate。
说白了委托就是委托别人帮你做一件事情,而协议就是这两个人签订的协议,不仅要办事,还要按照协议去办。

该文在创建自定义基类 - UIView基础上讲述。
实现Delegate和Protocol步骤如下

声明Protocol

首先声明Protocol,添加didScrolledToPage函数到该协议,以便委托对象读取当前页面页数。

1
2
3
protocol SCImagePagedViewDelegate {
func didScrolledToPage(page:Int)
}

添加delegate对象

private var scrollView:UIScrollView!下面增加一行

1
var delegate:SCImagePagedViewDelegate?

调用View中设置Delegate

ViewController.swift中添加如下函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
override func viewDidLoad() {
super.viewDidLoad()
var array = NSMutableArray()
for i in 0...3 {
array.addObject("image1")
array.addObject("image2")
}//设置array

var scroller = SampleScrollView(inView: self.view, array: array)
scroller.delegate = self
self.view.addSubview(scroller)

label = UILabel()
label.font = UIFont.systemFontOfSize(30)
label.center = self.view.center
label.text = "1"
self.view.addSubview(label)
}

设置Protocol函数

ViewController中增加以下函数,来更新页码

1
2
3
func didScrolledToPage(page: Int) {
label.text = "\(page)"
}

引用函数

在自定义View SampleScrollView中scrollViewDidEndDecelerating把println()替换为如下。

1
2
3
if let delegate = delegate {
delegate.didScrolledToPage(Int(page))
}