prepareForSegue and PerformSegueWithIdentifier sender

后端 未结 6 1013
执笔经年
执笔经年 2021-02-03 13:18

I am wondering about how the functions in the title work and also about the sender parameter.

Lets say a button click calls the performSegue method, does that also call

6条回答
  •  情书的邮戳
    2021-02-03 14:06

    There are, effectively, two ways you can trigger a segue. The first is via an action on a UI element in Interface Builder, the second is using performSegueWithIdentifier:sender: in your code. I say 'effectively', because under the covers, when the scene is loaded from the storyboard, an action handler is configured that ultimately calls performSegueWithIdentifier:sender:

    When performSegueWithIdentifier:sender: is called, the segue object is delivered to your view controller's prepareForSegue:sender: function.

    In the case where the segue was initiated by an action on a UI element then the sender will be that UI element (i.e. if it is an action connection on a UIButton then the sender will be the UIButton instance).

    If the segue is initiated by your code calling performSegueWithIdentifier:sender: then the sender will be whatever object you passed as the sender. This could be your view controller, a button, an array, anything. So yes, if you pass "Hello World" to performSegueWithIdentifier:sender: as the sender value then this will be the sender in prepareForSegue:sender:

    In terms of the order of operations:

    1. performSegueWithIdentifier:sender is called, either by your code or as a result of an action on a UI element
    2. If your view controller implements shouldPerformSegueWithIdentifier:sender: then this function is called. If this function returns false then the segue is cancelled
    3. The segue object and destination view controller object are created
    4. If your view controller implements prepareForSegue:sender: then this function is called.
    5. Once prepareForSegue:sender: returns, the segue completes.

提交回复
热议问题