0

次のようなビュー階層があります:MainView-> SubView(PresentingView)-> ModalViewc(UIViewControllerのすべてのサブクラス)

ModalViewのボタンをクリックして、ModalViewとPresentingViewの両方を削除し、MainViewに戻ってModalViewXを表示できるようにします。

MainView-> ModalViewX(UIViewControllerのすべてのサブクラス)

[[self presentingViewController] removeFromParentViewController];

上記のコードは単にModalViewを却下しますが、PresentingViewは残ります。

私の最終的な目標は、MainViewに戻る前に、ModalViewボタンにいくつかの結論ロジックを実行させることです。ボタンをクリックすると、基本的に次のアクションが実行されます。

  1. 結論ロジック
  2. self(ModalView)とPresentingViewを削除します(削除をアニメーション化できる場合はボーナスポイント)
  3. MainViewにModalViewXを提示するように指示します(おそらく、ModalView-> viewDidUnloadメソッドでステップ3を呼び出す必要があります)

これを行う方法についての提案はありますか?

4

2 に答える 2

1

まず、ルートビューとしてを使用して、プロジェクト全体をUINavigationControllerに埋め込みますMainViewController。から取得するMainViewControllerには、SubViewControllerこれを実行します。

- (IBAction) theButtonClicked : (id) sender {
    SubViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"YourIdentifier"];
    [self.navigationController pushViewController:vc animated:YES];
}

これにより、次のUIViewControllerに移動します。情報を渡したい場合は、を設定するだけですvc setVariable:

ルートビューに戻るには、[self.navigationController popToRootViewControllerAnimated:YES]

もう1つの方法はCTRL+drag、ボタンから次のUIViewControllerに移動するセグエを使用することです。次に、実行するロジックをメソッドに設定する必要があります。- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)senderここで、destionationcontrollerはsegue.destinationViewControllerです。

このように、seguestyleをcustomに設定し、サブクラス化することで、カスタムアニメーションを追加することもできますUISegue

于 2012-11-04T12:56:17.313 に答える
1

ステップ1(つまり、「結論ロジック」)には、ターゲットアクション設計を使用します。具体的には、これは、特定のイベントが発生したときに呼び出されるオブジェクトにメソッドを追加することを意味します。たとえば、これは、ストーリーボードからビューコントローラにコントロールドラッグを使用して実行できます。選択したViewControllerがターゲットであり、作成したメソッドがアクションです。詳細については、https ://developer.apple.com/library/mac/#documentation/General/Conceptual/Devpedia-CocoaApp/TargetAction.htmlをご覧ください。

ビューコントローラのフローを制御するには、いくつかの異なるオプションがあります。

モーダルビューコントローラの場合、削除を現在のビューコントローラに委任することをお勧めします。これは、モーダルビューコントローラーにデリゲートと呼ばれるプロパティがあり、モーダルビューコントローラーを削除する準備ができたときにメッセージを受信することを意味します(つまり、モーダルビューコントローラーはそれ自体を削除しません)。デリゲートは、作成したプロトコルに準拠している必要があり、関連する終了ロジックを処理し、dismissViewControllerAnimatedを呼び出すことができます。これにより、提示された(モーダル)ビューコントローラーが削除されます。

または、Martolが述べたように、ストーリーボードでセグエを使用してフローを管理することもできます。

ビューコントローラのデータとフローを管理するためのこれらのアプローチの詳細については、http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers/ManagingDataFlowBetweenViewControllers.htmlを確認してください。

お役に立てば幸いです。

于 2012-11-05T13:20:15.043 に答える