0

したがって、基本的にアプリのロード時にいくつかの Viewcontrollers をプッシュしようとすると問題が発生し、既に登録されているかどうかがチェックされ、登録されている場合は差分 VC に送信され、登録されていない場合は RegisterVC に送信されます。それはストーリーボードで行われ、問題は、コードをviewDidLoadに配置するとプッシュが機能することですが、ストーリーボードからrootviewcontrollerが表示されませんが、コードをコーダーでinitに移動するとviewcontrollerが表示されますが、プッシュリターンの新しい VC にプッシュするはずのメソッドに nil があるため、遷移は発生しません。

コードは次のようになります。

    if (emp == nil) {
        [self gotoRegisterView];
    }
    else {
        [self gotoSMWView];
    }

と :

- (void) gotoRegisterView {
    UIViewController* vc = [self.storyboard  instantiateViewControllerWithIdentifier:@"RegisterVC"];
    [self.navigationController pushViewController:vc animated:YES];
}

- (void) gotoSMWView {
    UIViewController* vc = [self.storyboard instantiateViewControllerWithIdentifier:@"SMWVC"];
    [self.navigationController pushViewController:vc animated:YES];
}

どんな提案でも大歓迎です。

4

1 に答える 1

0

ストーリーボードを使用している場合は、メイン シーンをそこから呼び出したい他のシーンに接続するだけです。次に、Ctrl+DragイニシャルからVIEW CONTROLLER(View Controller の要素ではなく、コントローラー自体から)。次に、作成したセグエをクリックして、わかりやすい名前を付けます。この例では、segue1and とだけ言いますsegue2

次に、 にsegue1移動するRegisterViewsegue2、次のSMWView操作を実行できます。

- (void) gotoRegisterView {
    [self performSegueWithIdentifier:@"segue1" sender:self];
}

- (void) gotoSMWView {
    [self performSegueWithIdentifier:@"segue2" sender:self];
 }

これらのView Controllerで他の初期化または設定を行う必要がある場合は、このメソッドをオーバーライドできます。

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

このメソッド内で、segueこのテンプレートを使用して呼び出されたものを確認できます。

if([[segue identifier] isEqualToString:@"segue1"])

そして、次のように目的のビュー コントローラーのインスタンスを取得できます。

YourViewController *vc = [segue destinationViewController];
于 2013-11-15T00:07:45.693 に答える