1

申し訳ありませんが、同様の質問のどれも有効な解決策を提供しません。

新しいシングル ビュー プロジェクト。ストーリーボード アクション:

  • VC1はnav-controllerに組み込まれています
  • VC1 のボタンは、VC2 へのプッシュシークをアクティブにします
  • VC2 のボタンは、VC3 へのモーダルセグエをアクティブにします
  • VC3 にはボタンと、ボタン アクションを処理するためのUIViewController サブクラスがあります。

問題文:モーダル VC3 のボタンで VC3 と VC2 の両方を一度に閉じて、VC1 に戻すにはどうすればよいですか?

これは機能しませんでした - VC2 のみに移動します:

- (IBAction)dismissPressed:(id)sender {
    UINavigationController *myNavController = [self navigationController];
    [self dismissViewControllerAnimated:NO completion:^{
        [myNavController popToViewController:[myNavController.viewControllers objectAtIndex:1] animated:NO];
    }];
}

どうもありがとうございました!

4

3 に答える 3

0

わかりました、ここに解決策があります:

自分自身を ios6+ に制限できる場合、正しい答えは、アンワインド セグエとは何のためであり、どのように使用するかで説明されているように、ボタンをアンワインド セグエにすることです。

しかし、あなたが私のようで ios5 に準拠する必要がある場合、解決策は次のようになります。

モーダル セグエを呼び出す VC で、次のようにデリゲートを宣言します。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"segueModalVC"]) {
        ModalVC *vc = [segue destinationViewController];
        vc.prevVC = self;
    }
}

宛先モーダル VC のヘッダーを #import する必要があります。

モーダル VC 自体に、次のように前の VC を保持するプロパティを追加します。

@property (weak, nonatomic) UIViewController *prevVC;

これで、両方の VC をポップするボタンのアクションは次のようになります。

- (IBAction)pressedMainMenu:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
    [[self.prevVC navigationController] popViewControllerAnimated:NO];
}

[完全に動作し、VC3 から VC1 へのフリップ アニメーションを実行できる最終バージョンを表示するために編集されました。これを完成させるのに何時間もかかりましたが、今では無料で楽しむことができます:)]

モーダル VC には、前の VC にアクセスするための「ネイティブ」メソッドがないという事実は、設計上のバグです。

于 2013-10-21T21:04:35.547 に答える