我正在使用情节提要,在我的情节提要中,我有一个与另一个视图控制器连接的按钮。因此,当您单击按钮时,会显示另一个视图控制器。我使用 Action Segue - Push in the storyboard 连接了它。我还将按钮与 IBAction 属性连接起来。问题是当我单击按钮时,它首先转到其连接的视图控制器,然后执行 IBAction 函数。如何更改此订单?
3 回答
您无法更改该顺序。您可以做两件事。
第一:只使用segue。覆盖prepareForSegue:
并将您的代码放在那里。如果该视图控制器有多个 segure,那么您可以区分prepareForSegue:
当前正在执行哪一个。为此,您应该为他们提供唯一的名称/segue ID。
第二:仅使用 IBAction。在 IBAction 方法的最后,调用performSegueWithIdentifier:sender:
. 同样,为此,您必须使用唯一的 segue ID 命名所有 segue。
要问自己的问题是,为什么要同时使用两者?选择一个并坚持使用 IMO。
如果你想在 segue 发生时执行一些操作,你应该实现
更新地址评论
我实际上不知道如何在代码中做到这一点,如何在不使用 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];
我通过链接我的 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”将您的展开或其他此类按钮连接起来。魔法。