iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
Mobile Development

ios 的小小實驗室 !系列 第 18

DAY 18 『 畫面間跳頁傳值 - Protocol And Delegate 』

  • 分享至 

  • xImage
  •  

昨天介紹完如何跳頁,今天將會分享如何跳頁傳值。

成品:

  • 剛執行模擬器的樣子

  • 按下 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)
}

這樣就完成跳頁傳值啦!明天會有新的實作分享,敬請期待!


上一篇
DAY 17 『 Xib 畫面跳轉 - push 、 present 』
下一篇
DAY 19 『 連接 API 實作 - 天氣 APP 』Part1
系列文
ios 的小小實驗室 !30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言