有条件的Segue使用故事板

时间:2013-09-22 18:28:47

标签: ios objective-c

我只需要知道如何对某些视图进行一些'条件'重定向/ segue。例如:

如果用户尚未登录,则会显示包含登录表单的视图。但如果用户已经登录,他们将看到他们的个人资料视图。

如何使用故事板制作条件segue?

谢谢

5 个答案:

答案 0 :(得分:74)

对于条件segue,不要像往常那样从按钮开始segue。 而不是使用以下步骤:

  1. 在storyboad中,直接从源视图控制器启动segue到目标视图控制器。为此,您可以将视图下方栏上的源视图控制器图标拖动到主画布区域上的目标视图控制器。请记住,您必须直接连接两个视图控制器,而不是任何控件。

  2. 为此segue输入合适的segue标识符。例如说“conditionSegue”

  3. 现在,在源视图控制器的.m文件中执行您的条件并在“self”上调用-performSegueWithIdentifier:sender:方法,如下所示:

    -(void)loadDestinationVC{  
        if(condition == YES){  
    
           [self performSegueWithIdentifier:@"conditionSegue" sender:nil];  
        }  
    }
    
  4. 我希望我说清楚。

答案 1 :(得分:14)

我相信如果你想使用按钮中的segue,更好的方法就是使用它:

首先创建一个按钮并使用segue将其连接到另一个视图,为此segue命名

然后在.m文件中使用此方法

    - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    if ([identifier isEqualToString:@"SegueName"]) {
        //Check if should make the segue 
        //if not do something
        [self doSomething];
        //and return NO;
        return NO;
    }
    return YES;
    }

答案 2 :(得分:8)

在Swift中你可以做到: 正如@Gaurav Singh在他的回答中所说的那样

步骤1:将ViewControllerA中的segue插入ViewControllerB。 segue应该从ViewControllerA本身开始,而不是从其中的任何控件(如Button)开始。

步骤2:在故事板中为segue提供唯一标识符。例如:seageFromAtoB

第3步:在ViewControllerforA.swift中写道:

if(condition == true) {
    self.performSegueWithIdentifier("seageFromAtoB", sender: self)
}

如果您在其他Thread中执行某项任务,则使用performSegueWithIdentifier可能会抛出异常。

如果您收到此错误,则应使用:

if(condition==true){
      NSOperationQueue.mainQueue().addOperationWithBlock {
           self.performSegueWithIdentifier("seageFromAtoB", sender: self)
      }
}

这将在主Thread中执行segue重定向。

希望对寻找Swift选项

的人有所帮助

答案 3 :(得分:3)

您可以直接从一个控制器到另一个控制器(或其他控制器)创建segue,并为它们指定标识符。在代码中,您可以根据您的条件选择segue,并调用performSegueWithIdentifier:sender:。

答案 4 :(得分:1)

通过从底部的视图控制器图标拖动到目标,创建“通用”segue。此segue不会与任何操作相关联。然后,在您的代码中,如果事件使用您想要触发segue的条件代码,请调用:

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender