如何检查使用了哪个segue

时间:2013-04-23 10:48:27

标签: iphone ios objective-c uistoryboardsegue

我得到两个segue,导致相同的viewController。有2个按钮使用2个segues连接到同一个viewController。在那viewController我需要检查点击了哪个按钮。所以实际上我需要检查使用/预制的segue。我如何在viewControllers类中检查这个?我知道有prepareForSegue方法,但我不能将它用于我的目的,因为我需要将prepareForSegue放在2个按钮所在的类中,我不希望它在那里但是我想要它在viewControllers类中,因为我需要在该类中访问和设置一些变量。

2 个答案:

答案 0 :(得分:8)

您需要在第一个viewftroller的prepareforsegue方法中设置第二个viewcontroller的变量。这就是它的完成方式:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:segueIdentifier1])
    {
        SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController;
        if(sender.tag == ...) // You can of course use something other than tag to identify the button
        {
            secondVC.identifyingProperty = ...
        }
        else if(sender.tag == ...)
        {
            secondVC.identifyingProperty = ...
        }
    }
}

然后你可以在第二个vc中检查该属性,以了解你是如何到达那里的。如果您在故事板中为2个按钮创建了2个segue,则只有segue标识符足以设置相应的属性值。然后代码转变为:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:segueIdentifier1])
    {
        SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController;
        secondVC.identifyingProperty = ...
    }
    else if([segue.identifier isEqualToString:segueIdentifier2])
    {
        SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController;
        secondVC.identifyingProperty = ...
    }
}

答案 1 :(得分:2)

首先,您需要使用performSegueWithIdentifier方法直接在storyborads中或通过代码设置segue标识符。 独立于您选择的方式,您的视图控制器将触发以下方法,因此您需要覆盖它以了解哪个segue正在发送消息,您喜欢这样:

 -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {    
        if ([segue.identifier isEqualToString:@"ButtonSegueIdentifierOne"]) {
            // button 1
        }
        if ([segue.identifier isEqualToString:@"ButtonSegueIdentifierTwo"]) {
            // button 2
        }
}