2013-09-22 128 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重定向。

希望這有助於有人找斯威夫特選項