prepareForSegue和PerformSegueWithIdentifier发件人
我想知道如何在标题的function工作,还有发件人参数。
可以说button点击调用performSegue方法,那么也调用prepareSegue方法呢? prepareSegue方法在执行performSegue方法之前调用,但在button被按下之后?
另外,两个函数中的“sender”参数是链接的吗? 如果我在performSegue方法中传入一个string作为发送者,那么将传递给prepareSegue方法中的sender参数? 换句话说,如果我将performSegue方法中的sender参数设置为“Hi world”,prepareSegue方法中的sender参数是否也是相同的string?
谢谢
实际上,有两种方法可以触发一个继续。 第一个是通过对Interface Builder中的UI元素的操作,第二个是在你的代码中使用performSegueWithIdentifier:sender:
我说'有效',因为在封面里,当情景板从场景板加载时,configuration一个动作处理器,最终调用performSegueWithIdentifier:sender:
当performSegueWithIdentifier:sender:
被调用时,segue对象被传递给你的视图控制器的prepareForSegue:sender:
函数。
在通过UI元素上的动作启动segue的情况下,发送者将是该UI元素(即,如果它是UIButton
上的动作连接,那么sender
将是UIButton
实例)。
如果您的代码调用performSegueWithIdentifier:sender:
启动segue performSegueWithIdentifier:sender:
那么sender
将是您作为sender
传递的任何对象。 这可能是你的视图控制器,button,数组,任何东西。 所以是的,如果你传递“Hello World”来执行performSegueWithIdentifier:sender:
作为sender
值,那么这将是prepareForSegue:sender:
的sender
prepareForSegue:sender:
就操作顺序而言:
-
performSegueWithIdentifier:sender
通过您的代码或作为UI元素上的操作的结果调用performSegueWithIdentifier:sender
- 如果你的视图控制器实现了
shouldPerformSegueWithIdentifier:sender:
那么这个函数被调用。 如果这个函数返回false
那么segue被取消 - segue对象和目标视图控制器对象被创build
- 如果你的视图控制器实现了
prepareForSegue:sender:
那么这个函数被调用。 - 一旦
prepareForSegue:sender:
返回,segue完成。
performSegue方法调用一个segue从一个视图执行到另一个视图。 在segue实际发生之前,prepareForSegue方法被调用,如果你想在视图之间传递数据,你可以在那里做。
performSegue方法不接受你想发送的参数。 这只是用来调用赛格首先。 您要发送的任何数据将通过prepareForSegue完成。
这是一个例子。
override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. performSegueWithIdentifier("test", sender: self) //You can set the identifier in the storyboard, by clicking on the segue } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "test"{ var vc = segue.destinationViewController as! RandomViewController vc.data = "Data you want to pass" //Data has to be a variable name in your RandomViewController } }
让我知道这是否有帮助!
我的两分钱给初学者…在迅捷3中是:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { }
所以,如果到达的控制器(MyController类)实现了一个“fillData”方法:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let destController = segue.destination as MyController{ destController.fillData(...) } }
The_Curry_Man的答案为我工作。 这里是他的代码Swift 3的更新。
override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. performSegue(withIdentifier: "test", sender: self) //You can set the identifier in the storyboard, by clicking on the segue } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "test"{ var vc = segue.destinationViewController as! RandomViewController vc.data = "Data you want to pass" //Data has to be a variable name in your RandomViewController } }