2013-09-22 88 views
42

我只需要知道如何使某些'条件'重定向/ segue某些视图。例如:有条件的使用故事板segue

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

如何使用故事板那样制作条件性的segue?

谢谢

回答

68

对于有条件的段落,不要像平常那样从按钮开始一个段落。 取而代之的是使用以下步骤:

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

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

  3. ,在源视图控制器的.m文件执行你的病情,并呼吁-performSegueWithIdentifier:sender:方法上的“自我”是这样的:

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

我希望我做到了明确。

+0

它的工作你的却,我也从一个UITableViewCell一个conditionall SEGUE,因为有些细胞具有显示一些看法和其他细胞等... 事情是当我从push segue回来时,它失去了焦点并重置了视图,它不会回到开始动作的单元格。我有一个顶部的分段控件的tableview,它在2个数据源之间变化。如果我从一个uitableviewcell中选择了分段控件的第二个索引,当我从segue回来时,它开始在分段控件上使用第一个索引的视图... – fguespe

+0

@fguespe你是否在问这个问题的解决方案或者是一般性评论。 –

+0

是的,我需要一个解决方案,但我提前了一下,我明白并不是故障的条件赛格。正常的赛段发生。问题是分段控件在返回时查找索引,但它显示了第一个分段数据。 – fguespe

3

您直接从一个控制器到另一个(或他人)进行塞格斯,并给他们的标识符。在代码中,您根据您的条件调用segse选择,然后调用performSegueWithIdentifier:sender :.

14

我认为更好的方法,如果你想使用按钮塞格斯将使用:

首先创建一个按钮,并使用一个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; 
    } 
+0

如果您使用的是xcode 6并且不确定要使用哪种类型的sague,则可以使用“Action Sague”下的“Show”sague。另外,要给sague一个标识符(名称),请在故事板中选择它,并在“属性”检查器(右侧)下的“标识符”字段中输入选择的名称 –

1

创建按ctrl底部到目的地从视图控制器图标拖动“通用” SEGUE。这segue不会与任何操作相关联。然后,在你的代码中不断的情况下使用要触发SEGUE你的条件代码,请致电:

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

在斯威夫特你可以这样做: 为@Gaurav辛格在他的回答提出

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

步骤2:在storyboard中给出segue唯一标识符。例如:seageFromAtoB

第3步:在您的ViewControllerforA。迅速写:

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

如果您在其他一些Thread执行一些任务,然后使用performSegueWithIdentifier可以抛出异常。

如果你得到这个错误,那么你应该使用:

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

这将在主Thread执行SEGUE重定向。

希望这有助于有人找斯威夫特选项