作者tkdmaf (皮皮快跑)
看板MacDev
标题Re: [问题] 请问Swift delegate protocol问题
时间Sun Feb 5 00:30:01 2017
※ 引述《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://webptt.com/cn.aspx?n=bbs/MacDev/M.1486225805.A.F78.html
1F:推 iphone7pro: 原来要这样用 感谢~~~~~:D 02/05 00:40