0

複数のクラスの管理とステート マシンの駆動を担当する高レベルのコントローラー クラスがあります。

状態ロジックの一部には、いくつかの異なる画面の一時的な表示が含まれます。これらの画面ごとに専用のビュー コントローラーがあり、高レベル コントローラーはこれらの他のコントローラー クラスを作成し、必要に応じてモーダル ビュー コントローラーとして表示します。

ただし、これらのビュー コントローラーの 1 つは非常に単純で、状態の進行に応じて変化するボタンとテキストがあります。高レベル コントローラーは、どの段階でどのテキストを表示するかを認識し、ボタンが押されたタイミングを認識する必要があるクラスです。

したがって、ビュー コントローラーは、高レベル コントローラーがテキストを設定するために呼び出すことができる API を提示する必要があります。また、ボタンが押されたときにコールバックできるように、高レベル コントローラーはビュー コントローラーのデリゲートである必要があります。これは私が取り除きたい不要な配管のようです。

したがって、ビュー コントローラーのアウトレットとアクションを高レベル コントローラーに移動できるので、この配管は必要ありません。しかし、View Controller には何も残っていません (ペン先からインスタンス化されています)。ですので、完全になくしたいと思います。

次に、それがなくなったら、これを高レベルのコントローラーに含めることを計画していました。

UIViewController *vc = [[UIViewController alloc] initWithNibName:@"TheNib" bundle:nil];

or should it be:
UIViewController *vc = [[UIViewController alloc] init];
[[NSBundle mainBundle] loadNibNamed:@"TheNib" owner:vc options:nil];

[[UIApplication sharedApplication].delegate.window.rootViewController presentViewController: self.vc animated: NO completion:nil];

ただし、これを実現するには、IB をどのように設定する必要がありますか?具体的には、a) ファイルの所有者を何に設定する必要がありますか? b) IB 内のビューは何に設定できますか?

高レベルのコントローラーは既に別のクラスから継承しているため、UIViewController から派生させることができないため、IB のビューに接続するためのビュー プロパティがないことに注意してください。

高レベルのビュー コントローラー内で作成された UIViewController に xib コンテンツを接続する簡単な方法はありますか?

4

3 に答える 3

1

ファイルの所有者を変更するか、NIB にクラス オブジェクトを追加してみてください…</p>

ここに画像の説明を入力

「オブジェクト」をオブジェクト リストにドラッグし、適切なクラスを設定するだけです。次に、このオブジェクトに接続された IBactions を使用できます。

たぶん、私が作った(そして答えた)この質問があなたを助けるかもしれません:Cocoa Touchでのコントローラ設計パターンの調整

于 2012-06-08T21:39:20.990 に答える
1

ビューとそのコントローラーは「モジュール性の要素」です。したがって、ビューにボタンがある場合、親ではなくビューのコントローラーがボタンのターゲットになる必要があります。ビューのコントローラーは、親/その他がボタン イベントに関心を持つことを考慮して、親/その他が参加できるデリゲート インターフェイスまたは通知インターフェイスを定義する必要があります。

あなたの場合、「不要な配管を削除する」ことにより、1)「モジュール性の要素」から離れ、2)配管の削除に関連する問題について質問するように導く困難を生み出しています。

標準パターンを使用するのが最善です。

于 2012-06-08T21:39:29.590 に答える
0

ビューが何らかのテキストとボタンを表示するだけの場合、それを UIAlertView に置き換えてみませんか? これは、いくつかのテキストと 1 つまたは 2 つのボタンを表示するための単純なコントロールであり、どのボタンが押し戻されたかを取得するための適切に定義されたインターフェイスを備えています。

もちろん、サードパーティの代替品を使用しない限り UIAlertView を実際にカスタマイズできないため、これは設計に合わない可能性があります)。

于 2012-06-08T21:47:56.350 に答える