0

現在のアプリケーションでは、特定の回数を使用したいのですUICollectionViewが、選択動作が異なります。次のストーリーボード レイアウトを "is" (および動作中) と考えてください。

タブ バー コントローラー (2 項目):
-> Navigation Controller 1 -> Collection View Controller -> 一部の Table View Controller
-> ナビゲーション コントローラ 2 -> (基本) ビュー コントローラ

には、 へのストーリーボード接続をBasic View Controller持つ 2 つがあります。から に移行したいのですが、コレクションからアイテムを選択すると、ビューがポップされて に戻ります。UIButtonsPushCollection View ControllerBasic View ControllerCollection View ControllerBasic View Controller

Collection View Controllerの対応するprepareForSegueメッセージに設定されるBasic View Controller(または、ユーザーが を選択した場合はまったく設定されない)にカスタム プロパティを設定したTab Bar Itemので、どのコントローラーまたはどの UI コンポーネントがプッシュをトリガーしたかを検出するのに問題はありません (3 つの方法があります)。 : タブ バー項目を選択するか、基本ビューのボタンの 1 つをタップします)。

問題はポップCollection Viewです。

これまでの私のコード:

- (void)prepareForSegue:(UIStoryboardSegue *)segue 送信者:(id)送信者 {
    if (self.mode == nil) {
        // 何もしない
    } そうでなければ ( [self.mode isEqualToString:@"foobar"] ) {
        // 私が試した 1 つの方法
        [自己却下ViewControllerAnimated:YES完了:nil];
    } そうでなければ ( [self.mode isEqualToString:@"blah"] ) {
        // その他の方法
        BasicViewController *targetVC = self.navigationController.viewControllers[ 0 ];
        [self.navigationController popToViewController:targetVC アニメーション:YES];
    }
}

残念ながら、私のアプリはそれぞれの行でクラッシュしdismissます。popToViewController. 異なるナビゲーション方法で同じView Controllerを使用することさえ可能ですか?

これが私を助けるのに十分な情報であることを願っています。ご存知かもしれませんが、プロジェクトは成長し、考慮すべきコードが他にあるかどうかはわかりません:)

前もって感謝します!

4

2 に答える 2

0

「コレクション ビュー コントローラー」で選択された行のアクションは、「コレクション ビュー コントローラー」が提示された場所によって異なります。ある場合は「Basic View Controller」に戻り、別の場合は「some Table View Controller」に進みます

tableView:didSelectRowAtIndexPath:次のように定義して、これを実装します。

- (void)        tableView: (UITableView *) tableView 
  didSelectRowAtIndexPath: (NSIndexPath *) indexPath
{
   if (self.parentIsBasicViewController)  // set in the incoming segue, probably.
      [self.presentingviewController dismissViewControllerAnimacted: YES completion: nil]
   else
      [self performSegueWithIdentifier: @"some Table View Controller" sender: self];
}
于 2013-04-21T13:38:48.663 に答える
0

メソッドは、そのprepareForSegue:コードを配置する適切な場所ではありません。これは、セグエが実行される直前に呼び出されます。これは、通常、何らかの遷移が発生しようとしていることを意味します。

コレクションビューセルをセグエに接続し、コレクションVCの「前」のビューコントローラーに応じてセグエの動作を変更しようとしていると仮定しています。

その場合、考えられる解決策がいくつかあります。

  • その特定の遷移にセグエを使用せず、手動で vc-transitions を実行します
  • UIStoryboardSegueさまざまな遷移を処理できる独自のサブクラスを作成します。UIStoryboardSegue クラス リファレンスを参照してください。次に、メソッドでカスタム セグエのいくつかのプロパティを設定prepareForSegue:して、セグエにどのトランジションを実行するかを指示できます。
  • 巻き戻しセグエを使用します。Unwind セグエの目的と使用方法を参照してください。
于 2013-04-21T12:22:21.767 に答える