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