给IBAction优先权而不是segue

时间:2013-03-21 18:31:32

标签: ios objective-c storyboard

我正在使用故事板,在我的故事板中,我得到了一个与另一个视图控制器连接的按钮。因此,当您单击该按钮时,将显示另一个视图控制器。我使用Action Segue连接了它 - 推入故事板。我还将按钮与IBAction属性连接起来。问题是,当我单击按钮时,它首先进入其连接的视图控制器,然后执行IBAction功能。我该如何更改此订单?

3 个答案:

答案 0 :(得分:3)

您无法更改该订单。你可以做两件事。

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

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

答案 1 :(得分:0)

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

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

prepareForSegue:

更新以发表评论

  

我实际上不知道如何在代码中执行此操作,如何在不使用Action Segue Push的情况下加载我的故事板上的ViewController?

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

enter image description here

注意故事板ID 设置为MyViewController

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

UIViewController *myViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"MyViewController"];
[self presentViewController:myViewController animated:YES completion:nil];

答案 2 :(得分:0)

我通过链接来自我的segue的IBAction来解决这个问题。我发现这种方法最有用,因为我可以有一个" save"没有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,并将您的展开或其他此类按钮用标识符"保存"。魔法。