Re: [問題] 請問Swift delegate protocol問題

作者: tkdmaf (皮皮快跑)   2017-02-05 00:30:01
※ 引述《iphone7pro (i7pro)》之銘言:
: 小弟新手上路
: 用swift練習寫 delegate傳值
: 目標是將vc2 的textField的值傳給vc1
: vc1 有一個btn
: 我在StoryBoard上將vc1的btn拉action show出vc2
: vc2 有一個btn 是點擊後會觸發protocol方法代入一個參數
: 然後dismiss VC2
: 但回到vc1後 發現protocol方法都沒有執行
: 之後查了很多網路上的資料也沒有解答
: 之後我刪掉vc1 btn 在 storyboard 上的action
: 改成用code打 將vc2 presen出來
: 嘗試的結果是變正常了
: 可以成功把値傳到vc1
: 所以想問問前輩們,為什麼用一開始的方式不能傳值
: 但改成第二個方式可以傳值~?
: project壓縮檔:https://goo.gl/NOn3dG
: 分成vc2 跟 vc3
: vc2的可以運行 vc3是不能運行的版本
把你的performSegue那一段拿掉
改成這樣:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "Third" {
let vc3 = segue.destination as! ThirdViewController
vc3.delegate = self
}
}
preformSegue是用在自訂segue時使用的。
如果你是自己拉的segue就要用prepare
假設以你原本要使用perform的寫法會變成這樣:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
self.performSegue(withIdentifier: segue.identifier!, sender: segue)
}
override func performSegue(withIdentifier identifier: String, sender: Any?) {
let segue = sender as! UIStoryboardSegue
if identifier == "Third" {
let vc3 = segue.destination as! ThirdViewController
vc3.delegate = self
}
}
SO....
直接用prepare就好了。
作者: iphone7pro (i7pro)   2017-02-05 00:40:00
原來要這樣用 感謝~~~~~:D

Links booklink

Contact Us: admin [ a t ] ucptt.com