protocol傳值回上一頁
3 min readDec 10, 2017
主要是記錄protocol方面,所以就沒寫上pickerView的部分。
要做的效果是下一頁有個PickerView選擇顏色後,上一頁背景會改變顏色。
protocol ChangeColorDelegate {func changeBackColor(color: String)}var delegate: ChangeColorDelegate?
先在第二頁製造一個protocol及裡面的方法
還有一個變數delegate並符合此protocol
@IBAction func backBtn(_ sender: UIButton) {let selectRow = myPicker.selectedRow(inComponent: 0)let color = colorArray[selectRow]delegate?.changeBackColor(color: color)navigationController?.popViewController(animated: true)}
在返回鍵內設定delegate?.changeBackColor(color: color)
class ViewController: UIViewController, ChangeColorDelegate
設定第一頁的ViewController符合此protocol,所以就必須實作此protocol內的方法
func changeBackColor(color: String) {if color == "red" {view.backgroundColor = .red} else if color == "blue" {view.backgroundColor = .blue} else if color == "green" {view.backgroundColor = .green}}
實作此protocol內的方法
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {if segue.identifier == "twoVC" {if let twoVC = segue.destination as? TwoVC {twoVC.infoFromOne = sender as? StringtwoVC.delegate = self}}}
在prepare內將第一頁設定為two.delegate的屬性
這樣就能完成第二頁傳值回第一頁。