0

2 つのタブを持つタブ バー コントローラーがあります。最初のタブには、タイプ A のテーブル ビューが表示されます。セルをクリックすると、タイプ A のビューがナビゲーション スタックにプッシュされます。ご想像のとおり、このビューには戻るボタンがあり、ナビゲーション スタックからビューをポップして、タイプ A のテーブル ビューを表示します。

2 番目のタブには、タイプ B のテーブル ビューが表示されます。セルをクリックすると、タイプ B のビューがナビゲーション スタックにプッシュされます。繰り返しますが、ご想像のとおり、このビューには戻るボタンもあり、ナビゲーション スタックからビューをポップして、タイプ B のテーブル ビューを表示します。

タイプ A ビューには、タイプ A のものをタイプ B のものに概念的に変換するボタンもあります。視覚的には、タイプ A のビューはタイプ B のビューに置き換えられます。舞台裏では、タイプ A のビューをナビゲーション スタックからポップし、タブをタイプ B のテーブルに変更し、タイプ B のビュー コントローラーをポップする必要があります。タイプ B のビューの戻るボタンでユーザーがタイプ B のもののテーブルに戻るようにするためのナビゲーション スタック。

これを実装するための最初のアイデアは、タイプ A ビューのボタンをタブ バー コントローラーの実装にリンクすることでした。これにより、既存のタイプ A ビューがポップオフされ、タブがタイプ B のリストに変更され、タイプ B ビューがプッシュされます。ナビゲーション スタック。ただし、これにより、タイプ A ビューからタブ バー コントローラーへの不要な参照が作成されます。

これを行うより良い方法はありますか?おそらくカスタムセグエで?

4

2 に答える 2

0

質問を投稿してから、各UIViewControllerには次のプロパティがあるため、タブバーコントローラーへの独自の明示的な参照を維持する必要がないことを学びましたparentViewController

これは、自分の参照を維持することなく、タイプAビューからカスタムタブバーコントローラーにアクセスできることを意味します。その結果、私のコードは少し単純になりました。タイプAのビューのボタンを押すと、タイプAのビューコントローラで次のコードが実行されます。

[(MyCustomTabBarController *)[[self parentViewController] parentViewController] switchToViewOfTypeB:referenceToObjectOfTypeA];

ここで、switchToViewOfTypeBは、セグエを実行するカスタムタブバーコントローラーのコードです。

タイプAのビューから、セグエの実行を担当するのはカスタムタブバーであることが明らかであるため、この場合に通知を使用するよりも、このアプローチの方が好きです。

于 2012-11-11T23:48:55.653 に答える
0

参照があなたにとってエレガントでないと思われる場合、それはNSNotificationの仕事のように聞こえます。ナビゲーションロジックを実行するのに最適なクラスは、カスタムの@ "switchToBThings"通知をリッスンするか、スイッチを要求するボタンから完全に切り離すことができます。

于 2012-11-05T01:28:03.067 に答える