9

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

4

2 回答 2

8

您需要在第一个视图控制器的 prepareforsegue 方法中设置第二个视图控制器的变量。这是这样做的:

- (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 = ...
    }
}
于 2013-04-23T10:52:37.203 回答
2

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

 -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {    
        if ([segue.identifier isEqualToString:@"ButtonSegueIdentifierOne"]) {
            // button 1
        }
        if ([segue.identifier isEqualToString:@"ButtonSegueIdentifierTwo"]) {
            // button 2
        }
}
于 2013-04-23T10:52:05.407 回答