一般來說 iOS 裡面最外層的就是 UIViewController這個元件 之後所以有的一個view不管是UILabelView,UIImageView,UITableView…..等 都是附加在這個容器上面
這裏就一個好玩的東西叫做Delegate, 他其實是一個protocol,就是要接收事情的物件實作這個protocol 就可以接收另外一個物件發送的事件
這個東西很好用就在於如果你將一個功能做一個一個物件,但是一這個物件接收到事件後, 必須傳遞到附加這個功能的主物件
這是時候就要用Delegate,在此說明一下使用方法:
例如說:
先宣告一個Delegate功能的protocol
protocol VideoListViewDelegate {
func tableViewItemClick()
}
我有一個VideoListView的功能物件,當使用者按下TableView的row item時,我必須處理相關的事情 如此當事情發生時呼叫delegate?.tableViewItemClick()
import Foundation
import UIKit
class VideoListView: UIView, UITableViewDelegate, UITableViewDataSource {
...
var delegate: VideoListViewDelegate?
... ...
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
delegate?.tableViewItemClick()
}
}
之後在ViewController去實作這個protocol,然後再實作這個protocol的方法
import UIKit
class VideoListHomePageViewController: UIViewController, VideoListViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
var videoView = VideoListView()
videoView.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func tableViewItemClick()
....處理VideoListView的tableView Item按下時的事情
}
}
如此就可以在兩個物件當中傳遞事件