48

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

如果用户尚未登录,则会出现带有登录表单的视图。但如果用户已经登录,他们将看到他们的个人资料视图。

如何使用情节提要制作这样的条件转场?

谢谢

4

5 回答 5

80

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

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

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

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

    -(void)loadDestinationVC{  
        if(condition == YES){  
    
           [self performSegueWithIdentifier:@"conditionSegue" sender:nil];  
        }  
    }
    

我希望我说清楚了。

于 2013-09-22T18:53:06.787 回答
14

我相信如果你想从按钮中使用segues,一个更好的方法是使用这个:

首先创建一个按钮并使用 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;
    }
于 2014-04-15T01:32:36.613 回答
8

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

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

第 2 步:在故事板中给 segue 一个唯一的标识符。例如:seageFromAtoB

第 3 步:在您的 ViewControllerforA.swift 中写入:

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

如果您正在执行其他任务,Thread那么 usingperformSegueWithIdentifier可能会引发异常。

如果您收到此错误,那么您应该使用:

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

这将在 main 中执行 segue 重定向Thread

希望这对寻找 Swift 选项的人有所帮助

于 2016-01-03T10:35:40.027 回答
3

你直接从一个控制器到另一个(或其他)控制器,并给它们标识符。在代码中,您可以根据自己的条件在 segue 之间进行选择,然后调用 performSegueWithIdentifier:sender:。

于 2013-09-22T18:35:01.647 回答
1

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

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender
于 2014-07-10T11:35:40.560 回答