performSegue:withSender:sender对象

时间:2013-07-10 08:39:05

标签: ios objective-c uistoryboardsegue

只是想知道发件人对象。

我知道您可以使用prepareForSegue...方法访问它,但在下一个destinationViewController中是否可以使用它?

即。在viewDidLoad我可以访问segueSender对象吗?

我从未在文档中看到过这种情况,我认为它可能有用。

编辑清晰度

我不会问如何执行segue或找到segue或类似的东西。

假设我有两个视图控制器(VCA和VCB)。

从VCA到VCB有一个segue,标识符为“segue”。

在VCA中我跑...

[self performSegueWithIdentifier:@"segue" sender:@"Hello world"];

我的问题是我可以从VCB访问@“Hello world”字符串,还是只能在VCA内的prepareForSegue...方法中使用?

即。我可以从目标控制器访问segue发送者对象吗?

4 个答案:

答案 0 :(得分:1)

所以答案是“不”。

感谢您的帮助。

答案 1 :(得分:1)

是的,你可以。

老问题但是我会在使用swift的答案中弹出

首先打电话

performSegueWithIdentifier("<#your segue identifier #>", sender: <#your object you wish to access in next viewController #>)

在prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        let dest = segue.destinationViewController as! <# your destination vc #>
        dest.<# sentThroughObject #>  = sender
    }
}

然后在vc中你有一个var接受传递的对象

class NextViewController: UIViewController {

    var <# sentThroughObject #> = AnyObject!()

 //cast <# sentThroughObject #> as! <#your object#> to use
}   

更新:SWIFT 3

performSegue(withIdentifier: "<#your segue identifier #>", sender: <#Object you wish to send to next VC#>)


override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
        let destination = segue.destinationController as! <# cast to your destination VC #>
        destination.sentViaSegueObject = sender as? <#your object#> 
    }

在目标VC中有一个属性来接受发送的对象

 var sentViaSegueObject = <#your object#>?

答案 2 :(得分:0)

你总是可以从storbyoard获得一个segue,然后获得sourceViewController。像这样:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStorboard" bundle:nil];
UIStoryboardSegue *mySegue = [storyboard instantiateViewControllerWithIdentifier:@"mySegue"];
[mySegue sourceViewController]; 

编辑: 评论打败了我。 ;)

答案 3 :(得分:0)

如果您尝试将对象从一个视图控制器传递到下一个视图控制器,您可能需要执行以下操作:

在父视图控制器中:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Only if you have multiple segues.
    if ([segue.identifier isEqualToString:@"NameOfYourSegue"]) {
        // Cast necessary to access properties of the destination view controller.
        [(YourChildViewController *)segue.destinationViewController setObject:theObjectToPass];
    }
}

您需要在故事板中为segue指定一个名称,并声明该对象的属性以在目标视图控制器中传递。