0

過去数年間、スタックオーバーフローで少なくとも月に一度はこの質問が殺されていることを認識していますが、まだ解決策を見つけることができません。

UITabBarController に由来する 2 つの ViewController があります。どちらもストーリーボードを通じて初期化されます。ある VC のメソッドを別の VC から呼び出そうとしています。もちろんインスタンスメソッドです。

ここに画像の説明を入力

以下の可能性について聞いたことがあります。

1: NS通知

2:プロトコルを定義し、ある VC を別の VC のデリゲートとして宣言します。

3:実際に RootViewController を介して何らかの方法でメソッドを呼び出しています。

私は NSNotifications を介して動作するコードを持っていますが、その概念が嫌いで、それを行う正しい方法を理解したいと思っています。私は可能性 (3) に最も興味があり、次に (2) は最後の手段です。

(2) を数時間動作させようとしましたが、他の VC からデリゲート VC を初期化せずに困惑しました。(ストーリーボードのためオプションではありません)。

(2)または(3)のいずれかが可能ですか?どうして?

どちらも不可能な場合、推奨される iOS アーキテクチャについての私の誤解は何ですか?

4

2 に答える 2

1

はい、3つ可能です。(タブ インデックス 0) と(タブ インデックス 1)の 2 つのUIViewControllerクラスがあるとします。からのメソッドを呼び出したいとしましょう。FooViewControllerBarViewControllerFooViewController-(void)doFooBarViewController

BarViewController、する[(FooViewController *)[self.tabBarController.viewControllers objectAtIndex:0] doFoo]

于 2012-12-21T07:51:54.147 に答える
0

NSNOtification を使用することは、同様のことを行うのに必ずしも間違った方法ではないと思います。私もこのコンセプトのために苦労しました。

このシナリオでは、通知は問題ないと思います:

  1. コントローラーAとBを含むタブバーコントローラーがあります
  2. コントローラー A は、本などのオブジェクトのリストです。
  3. コントローラー B は、フォームに入力して [送信] をクリックして本を作成するためのコントローラーです。
  4. 次に、コントローラ A がそのリストを更新します。

その理由は、コントローラー A の更新が「送信のクリック」によるものではないためです。ブックが作成されるため、更新されます。それはデータのための何かについてです。なんとなく「A BOOK IS CREATED」はアプリのクリティカルイベント。

別のシナリオでは、それは大丈夫ではありません

  1. コントローラーAとBを含むタブバーコントローラーがあります
  2. コントローラ A の中央に ViewC があります
  3. コントローラー B にはボタンがあり、クリックすると ViewC が上にシフトします

それは私自身の意見です。

于 2012-12-21T08:24:59.030 に答える