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

看板MacDev作者 (皮皮快跑)時間8年前 (2017/02/05 00:30), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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就好了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.180.243.62 ※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1486225805.A.F78.html

02/05 00:40, , 1F
原來要這樣用 感謝~~~~~:D
02/05 00:40, 1F
文章代碼(AID): #1ObW6Dzu (MacDev)
文章代碼(AID): #1ObW6Dzu (MacDev)