昨天介紹完如何跳頁,今天將會分享如何跳頁傳值。
成品:
剛執行模擬器的樣子
按下 Button 後會跳到這個畫面
按下「 按我即可跳回去! 」的按鈕後,會跳到回第一個畫面,並且將「 未跳頁過 」改為「 您已從 SecondVC 跳回 MainVC 」
沿用昨天的畫面跳轉程式碼
在 SecondVC.swift 加入 Protocol 協定的程式碼
在 class SecondVC: UIViewController 裡加入:var delegate: ChangeProtocol!
宣告這個畫面會遵循 ChangeProtocol,並請委任目標(delegate)去處理 ChangeProtocol 的事件
在 SecondVC 跳頁回去 MainVC 的按鈕裡,加入 ChangeProtocol 的委任:delegate.changeLableData(lableTxt: "您已從 SecondVC 跳回 MainVC")
請委任目標去處理 changeLableData 事件
在 MainVC.swift 加入:
在 MainVC 跳頁去 SecondVC 的按鈕裡,加入委任:toSecondVC.delegate = self
這樣就完成了兩畫面間的傳值了!
附上完整程式碼
// MainVC.swift
mport UIKit
class MainVC: UIViewController {
@IBOutlet weak var lable: UILabel!
@IBOutlet weak var btn: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func btnAct(_ sender: UIButton) {
let toSecondVC = SecondVC()
toSecondVC.delegate = self
present(toSecondVC, animated: true)
}
}
extension MainVC: ChangeProtocol{
func changeLableData(lableTxt:String){
lable.text = lableTxt
}
}
// SecondVC.swift
import UIKit
class SecondVC: UIViewController {
var delegate: ChangeProtocol!
@IBOutlet weak var btnToMainVC: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func btnPresent(_ sender: UIButton) {
delegate.changeLableData(lableTxt: "您已從 SecondVC 跳回 MainVC")
dismiss(animated: true, completion: nil)
}
}
@objc protocol ChangeProtocol {
@objc func changeLableData(lableTxt:String)
}
這樣就完成跳頁傳值啦!明天會有新的實作分享,敬請期待!