【问题标题】:ios - Connect one UIButton to 2 seguesios - 将一个 UIButton 连接到 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];
        }
}

【问题讨论】:

    标签: ios storyboard


    【解决方案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?)
                }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-11
          • 2015-01-27
          • 1970-01-01
          • 2021-11-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多