4

ここには3〜5個の同様の質問があることは知っていますが、答えのどれも私の問題を解決しません.

別のものを開くモーダル(テーブル)ビューコントローラーを開くViewControllerがあります。両方のモーダル ビュー コントローラーは、実際にはテーブル ビュー コントローラーです。2番目のものから両方を却下しようとしています。同様の質問で受け入れられたすべての回答を試しましたが、どれもうまくいきませんでした。

私は試した

[self dismissModalViewControllerAnimated:true]

[self.parentViewController dismissModalViewControllerAnimated:true]
[self.parentViewController.parentViewController dismissModalViewControllerAnimated:true]

[self.presentingViewController dismissModalViewControllerAnimated:true]
[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:true]

オプション 2、3、および 5 を試しても、何も起こりません。オプション 1 と 4 を使用すると、モーダル ビュー アニメーションとその下にあるビュー自体が一時的に閉じられ、その後、すべてが 2 番目のモーダル ビューに戻ります (今回はアニメーションなし)。

これには、モーダル ビューに tableViewControllers を使用しているという事実があると思い始めています。

ところで、didSelectRowAtIndexPath でモーダル ビューを閉じています。

4

3 に答える 3

2

これを試して:-

SecondViewアプリデリゲートファイルで設定されたBOOLフラグ変数を閉じて、SecondViewが開いているか閉じているかどうかを、のメソッドでその変数を確認しますFirstViewviewWillAppearもしそうなら、 [self dismissModalViewControllerAnimated:true]

于 2012-06-21T11:29:06.867 に答える
1

典型的なモデル ビュー コントローラーの動作は、モーダル ビュー コントローラーを自分自身からではなく、呼び出し元のビュー コントローラーから閉じることをお勧めします。厳格な規則ではありませんが、良い習慣です。

これを行うには、プロトコルを作成します。

    @protocol MyModalViewControllerDelegate
    - (void)modalViewControllerDidFinish;
    @end

そして、parentViewController と FirstModalViewController の両方をこのプロトコルの実装者にします。

    @interface FirstModalViewController <MyModalViewControllerDelegate>

次に、FirstModalViewController.h と SecondModalViewController.h の両方に以下を追加します。

    @property id<MyModalViewControllerDelegate> modalViewControllerDelegate

parentViewController と FirstModalViewController の両方で、 presentModalViewController:... を呼び出す直前に、次のように設定します。

    modalViewControllerAboutToAppear.modalViewControllerDelegate = self;
    [self presentModalViewController:modalViewControllerAboutToAppear animated:YES];

次に、SecondModalViewController で、項目を閉じる必要があると判断したコードで、

    [self.modalViewControllerDelegate modalViewControllerDidFinish];

次に、FirstModalViewController で、次を実装します。

    - (void)modalViewControllerDidFinish:(MyModalViewController*)controller {
        [self dismissModalViewControllerAnimated:YES]
        [self.modalViewControllerDelegate modalViewControllerDidFinish];
    }

最後に、親View Controllerで、次のことを実行できるはずです:

    - (void)modalViewControllerDidFinish:(MyModalViewController*)controller {
        [self dismissModalViewControllerAnimated:YES]
    }
于 2012-06-22T09:52:09.490 に答える
0

委任ファイルを使用しないため、次のことを行いました。

フィールドをFirstView追加するには

BOOL mClose;

メソッドをFirstView追加するには

- (void)close
{
    mClose = YES;
}

FirstViewメソッドviewDidAppear追加へ

if (mClose)
{
    [self dismissModalViewControllerAnimated:YES];
}

addをFirstView開くメソッドにSecondView

[secondView closeWhenDone:self];

フィールドをSecondView追加するには

FirstView *mParent;

メソッドをSecondView追加するには

- (void)closeWhenDone:(FirstView*)parent
{
    mParent = parent;
}

それSecondViewを閉じるメソッドに追加

[mParent close];
于 2015-07-03T08:55:05.187 に答える