ios - 将一个 UIButton 连接到 2 个 segues

Posted

技术标签:

【中文标题】ios - 将一个 UIButton 连接到 2 个 segues【英文标题】:ios - Connect one UIButton to 2 segues 【发布时间】:2012-07-19 02:34:11 【问题描述】:

我有一个 UIButton,我正在尝试将它连接到两个 segue。使用哪种 segue 取决于许多条件。

例如,当按下 UIButton(标题为“next”)时,

如果(条件 1)然后转到屏幕 A。否则转到屏幕 B。

我相信我的代码是正确的(无论如何我已经包含了它),但问题是在情节提要视图中,我可以使用 segue 将一个按钮连接到一个视图控制器。我该如何解决这个问题?

这是我正在使用的代码 -

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
        if([[segue identifier]isEqualToString:@"nextButtonID"])
            creditCardViewController *cvc = [segue destinationViewController];
        
        else if([[segue identifier]isEqualToString:@"next2ButtonID"])
            depositInfoViewController *divc = [segue destinationViewController];
        


-(IBAction)nextClicked
        if([accountType isEqualToString:@"patron"])
            [self performSegueWithIdentifier:@"nextButtonID" sender:self];
        
        else
            [self performSegueWithIdentifier:@"next2ButtonID" sender:self];
        

【问题讨论】:

【参考方案1】:

在情节提要窗口中,从视图底部的视图控制器图标控制拖动并将其拖动到目标视图控制器,给segue一个标识符,然后重复下一个segue。

【讨论】:

但它是从 viewController 做的,而不是从按钮做的。如果我理解正确的话。 没错。没有“物理上”附加到按钮上。 故事板只允许我 ctrl+拖动一个 segue。在一个 segue 将其源作为视图控制器之后,我不能再使该视图控制器成为新 segue 的源。这是新的吗?【参考方案2】:

您不需要在prepareForSegue 中提及任何代码,除非您想将一些数据传递给其他视图控制器

-(IBAction)nextClicked
  
    if ([strCheck isEqualToString:@"launch Screen A"])
        
            UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];

            ScreenA *screenA = (ScreenA *)[storyboard instantiateViewControllerWithIdentifier:@"ScreenA"];
            [self.navigationController pushViewController:screenA animated:NO];

        
        else
        

            UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];

            ScreenB *screenB = (ScreenB *)[storyboard instantiateViewControllerWithIdentifier:@"ScreenB"];

            [self.navigationController pushViewController:screenB animated:NO];

        

【讨论】:

【参考方案3】:

我经常这样做。我的方法是制作两个“手动”segues。

在界面生成器中 ctrl+从视图控制器 1 拖动到视图控制器 2 在 IB 中单击此 segue 并转到属性并将其命名为标识符:nextButtonID 创建第二个 segue 并按照相同的步骤将其命名为 next2ButtonID

那么我认为您的代码应该可以正常工作。我遇到了一个问题,我有一个从按钮开始的转场 - 然后 - 我也试图调用一个不同的转场。通过将这些设置为通用的“控制器到控制器”序列,它们被设置为在您执行操作时手动调用。

【讨论】:

【参考方案4】:

Swift 3 中:

在情节提要中,按住 ctrl+拖动以创建从 SourceViewControllerDestAViewControllerDestBViewController 的转场,并为每个转场指定一个标识符(例如“ToDestA”和“ToDestB”)。那么:

    @IBAction func onButton(_ sender: Any) 
    if (testForA)
        self.performSegue(withIdentifier: "ToDestA", sender: Any?)
     else 
        self.performSegue(withIdentifier: "ToDestB", sender: Any?)
        
    

【讨论】:

以上是关于ios - 将一个 UIButton 连接到 2 个 segues的主要内容,如果未能解决你的问题,请参考以下文章

尝试将 UIButton 连接到代码时出现“对象退出”功能

IBOutlet 用于约束并以编程方式将其连接到 UIButton

如何取消连接到 UIButton 的 segue

在代码中将 UIButton 连接到 IBOutlet 和 IBAction

您可以将 2 个 Facebook 应用程序连接到一个 iOS 应用程序吗?

将 IBAction 连接到自定义类