0

私は次の基本的なレイアウトのアプリを持っています。私は多くのプログラミングを行ったことを理解してください。しかし、私はIOSに比較的慣れておらず、ストーリーボード/セグエに頭を悩ませていません。

事実上、私のアプリには次の画面があります。

WelcomeViewConroller --- ModalSeque-> MenuViewController --modalSegue ---> newProjectVC || loadprojectVC ---modalSegue->ProjectScreenVC。

プロジェクト画面から、ユーザーはmenuVC画面に戻ることができます。

これで、すべてのセグエがView Controllerの新しいインスタンスを作成することを理解しました。これは素晴らしいことですが、これを実現したいのですが、ProjectScreenからセグエに戻って再度入力すると、メモリリークが非常に大きくなります。奇妙な行動。

Viewコントローラー、特にProjectScreenを離れるときに閉じる必要があることは理解していますが、何を試しても、これを実現することはできません。

どんな助けでも大歓迎です。

4

1 に答える 1

3

xcodeストーリーボードでビューコントローラーをチェーンするにはどうすればよいですか? 絵コンテで複数のシーンをさかのぼる一連の方法を列挙します。しかし、要するに、2 つの最も簡単なオプションは次のとおりです。

  1. アンワインド セグエ: iOS 6 以降のみをサポートする場合は、アンワインド セグエを使用します。たとえば、メイン メニューのビュー コントローラーで、アンワインド セグエを実装します。

    - (IBAction)gotoMainMenu:(UIStoryboardSegue *)segue
    {
        // if you need to do anything when you return to the main menu, do it here
    }
    

    また、メイン メニューの .h で必ず定義してください。次にcontrol、セグエが必要なボタンからシーンの下のパネルの「終了」ボタンまで + ドラッグし、「gotoMainMenu」オプションを選択します。

    フック アップ リラックス セグエ

  2. ナビゲーション コントローラー: iOS 5 のサポートが必要な場合は、ナビゲーション コントローラーを使用し、モーダル セグエをプッシュ セグエに置き換えます。次に、popToViewControllerまたはpopToRootViewControllerAnimatedを使用して複数のシーンに戻ることができます。ナビゲーション バーを表示したくない場合は、ストーリーボードでナビゲーション コントローラーを選択し、属性インスペクターで [ナビゲーション バーを表示] のチェックを外します。

    チェックを外すと、ナビゲーションバーが表示されます

    このシナリオでは、実際には、メニューシーンがルートであることを確認するのが最も簡単だと思います(そして、他の回答のポイント4で説明したように、ウェルカム画面に少し迂回させます)。popToRootViewControllerメインメニューに戻りたいときはいつでも。ただし、メイン メニューがルート ビュー コントローラーではなく、そこに戻りたい場合は、ポイント メニュー コントローラーをシーンからシーンに渡すか、または後で提示されたビュー コントローラーが次のような処理を行うようにすることができます。メインメニューに戻りたい:

    for (UIViewController *controller in [self.navigationController viewControllers])
    {
        if ([controller isKindOfClass:[MenuViewController class]])
        {
            [self.navigationController popToViewController:controller animated:YES];
            break;
        }
    }
    

Stack Overflow の他の場所では、 への呼び出しをネストする方法dismissViewControllerAnimatedや、そのような他のバリエーションを考えている人がいます。個人的には、ナビゲーション コントローラーとアンワインド セグエの方がはるかに簡単でエレガントだと思います。

于 2013-02-01T19:57:28.200 に答える