如何传递已使用 prepareForSegue 更改的变量

How to pass variable that has been altered with prepareForSegue


如何使用 prepareForSegue 传递自实例化以来已更改的变量?当我尝试使用 prepareForSegue 传递一个变量时,它发送的是实例化的值,而不是我将其更改为的值。
代码:

var friendChosen:String!

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if(segue.identifier == "toChat") {
        let theVC: chatViewController = segue.destinationViewController as! chatViewController
        theVC.friendChosen = friendChosen
    }
}

当用户点击一个按钮时,friendChosen 变量应该取一个名字的值。它确实如此,并成功地将它的值打印到终端,但是当调用 segue 时(在它被更改之后)它似乎没有注册。

func chooseFriend(sender: UIButton) {
    let requestIndex = sender.tag
    self.friendChosen = self.friends.objectAtIndex(requestIndex) as! String
}

the chooseFriend UIButton is a segue to the view controller that I am attempting to pass the variable to.

由于 segue 是由 UIButton 触发的,prepareForSegue 的调用发生在 UIButton 的操作调用之前,即chooseFriendchooseFriend 变量尚未设置,因此 prepareForSegue 看到一个空值。

您可以通过将这两种方法合二为一来解决此问题:将发件人转换为 UIButton,获取其 tag,然后设置变量,如下所示:

override func prepareForSegue(segue: UIStoryboardSegue, senderObj: AnyObject?) {
    if(segue.identifier == "toChat") {
        let sender = senderObj as! UIButton
        let requestIndex = sender.tag
        let theVC: chatViewController = segue.destinationViewController as! chatViewController
        theVC.friendChosen = self.friends.objectAtIndex(requestIndex) as! String
    }
}