3

我正在使用情节提要,在我的情节提要中,我有一个与另一个视图控制器连接的按钮。因此,当您单击按钮时,会显示另一个视图控制器。我使用 Action Segue - Push in the storyboard 连接了它。我还将按钮与 IBAction 属性连接起来。问题是当我单击按钮时,它首先转到其连接的视图控制器,然后执行 IBAction 函数。如何更改此订单?

4

3 回答 3

3

您无法更改该顺序。您可以做两件事。

第一:只使用segue。覆盖prepareForSegue:并将您的代码放在那里。如果该视图控制器有多个 segure,那么您可以区分prepareForSegue:当前正在执行哪一个。为此,您应该为他们提供唯一的名称/segue ID。

第二:仅使用 IBAction。在 IBAction 方法的最后,调用performSegueWithIdentifier:sender:. 同样,为此,您必须使用唯一的 segue ID 命名所有 segue。

于 2013-03-21T18:48:39.193 回答
0

要问自己的问题是,为什么要同时使用两者?选择一个并坚持使用 IMO。

如果你想在 segue 发生时执行一些操作,你应该实现

prepareForSegue:

更新地址评论

我实际上不知道如何在代码中做到这一点,如何在不使用 Action Segue Push 的情况下加载故事板上的 ViewController?

我发现的最简单的方法是在您的 Storyboard 中,您可以为视图控制器设置一个标识符。

在此处输入图像描述

注意Storyboard ID设置为 MyViewController

现在在您的 IBAction 方法中,您可以执行以下操作。

UIViewController *myViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"MyViewController"];
[self presentViewController:myViewController animated:YES completion:nil];
于 2013-03-21T18:34:32.913 回答
0

我通过链接我的 segue 中的 IBAction 解决了这个问题。我发现这种方法最有用,因为我可以在没有 segue 的情况下进行“保存”操作(将按钮链接到 IBAction,有时很有用),并且在必要时还可以使用 segue 来关闭视图控制器。

-(IBAction)save:(id)sender
{
 /* Do some Save stuff */
}

然后在我的 prepareForSegue:sender:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"save"])
    {
        [self save:sender];
    }
}

将您的非 segue 按钮链接到 IBAction,并使用标识符“save”将您的展开或其他此类按钮连接起来。魔法。

于 2014-03-14T16:06:03.690 回答