2017-10-09 6 views
0

私は手動でセグを作成しようとしています。これは特定のconidition(成功したログイン)がある場合にのみ発生します。私が続いているプログラマチックにセグを実行しました。

の手順は以下のとおりです。

1)私はソースのViewControllerでボタンを作成した、と私は先のViewControllerでドラッグしてボタンを接続します。

2)

は、私がどうかを確認するために、例を作ってみました、私は今 -(IBAction)buttonPressed:(id)sender

を作成したことlogin_ok

3)を呼び出し、セグエの識別子を設定します仕事かどうか私が書いた:

- (IBAction)buttonPressed:(id)sender 
{ 
    BOOL test = false; 
    if(test == true) 
    { 
     [self performSegueWithIdentifier:@"login_ok" sender:self]; 
    } 

理論的には、私はtest=falseを設定しているためセグエは、not動作するはず、と私はセグエが唯一のテスト= trueの場合に動作するべきであると述べました。

しかし、 segueが動作し、私は宛先のviewcontrollerに行きます。

なぜですか?

+0

どのようにセグを作成しましたか?ストーリーボードで?あなたは、ボタンから宛先vcまたは最初のvcからドラッグしましたか? – LinusGeffarth

+0

@LinusGeffarthうん、私はストーリーボードでセグを作った。私は、ソースviewcontrollerのボタンを選択して、私はそれを目的のviewcontrollerにドラッグしました –

答えて

0

宛先コントローラにドラッグしてボタンを接続した場合、それはとにかく続行されます。

ボタンを画面に表示するのではなく、画面間を連結する必要があります。次に、コードからsegueを制御することができます。

+0

さて、私は解決しました。ありがとうございました! –

+0

ありがとうございました:) – LinusGeffarth

0

ボタン間ではなくコントローラ間でセグを定義する必要があります。ビューコントローラ間の定義セグエは、あなたが任意のアクションのための条件を使用したい場合、あなたはこれらの2つの方法を使用することができますので、ビューコントローラに任意のコンポーネントからセグエを定義するよりも有用である効果的

[self performSegueWithIdentifier:@"segueID" sender:self];

例えば

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

- (IBAction)buttonPressed:(id)sender 
{ 
    BOOL test = YES; 
    if(test == YES) 
     [self performSegueWithIdentifier:@"login_ok" sender:self]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"login_ok"]) 
    { 
     YourNextController *controller = [segue destinationViewController]; 

     controller.welcomeText = @"Hi! Test is true congratulations"; 
    } 
} 

特にp-コントローラーから別のコントローラーにデータを渡すと、この方法は常に有用です。

関連する問題