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:

就操作顺序而言:

  1. performSegueWithIdentifier:sender通过您的代码或作为UI元素上的操作的结果调用performSegueWithIdentifier:sender
  2. 如果你的视图控制器实现了shouldPerformSegueWithIdentifier:sender:那么这个函数被调用。 如果这个函数返回false那么segue被取消
  3. segue对象和目标视图控制器对象被创build
  4. 如果你的视图控制器实现了prepareForSegue:sender:那么这个函数被调用。
  5. 一旦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 } }