protocol傳值回上一頁

Henry Huang
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的屬性

這樣就能完成第二頁傳值回第一頁。

--

--

Henry Huang
Henry Huang

Written by Henry Huang

大學讀企管/退伍後在業務圈打滾6年後突然有一天決定投入完全沒接觸過的程式設計/目前為一位iOS Developer/熱愛NBA/dafu1231@gmail.com

No responses yet