2011-09-16 9 views
0

のは、私は次の3つのファイルしているふりをしてみましょう:のObjective-C:分割アップクラス

  • MainViewController.h
  • MainViewController.m
  • MainViewController.xib

MainViewController.xibが異なる多くの情報を表示します。ボタン、ラベル、画像など、画面に表示されます。

さんも私もこの3つのファイルがあることをふりをしてみましょう:

  • DisplayController.h
  • DisplayController.m
  • DisplayController.xib

はそのDisplayController.mでメソッドを呼び出すために、MainViewController.m内、可能ですMainViewController.xibに表示されている内容を変更できますか?

画像を描画する別のクラスをMainViewController.xibに、ボタンをMainViewController.xibに描画する別のクラスを作成するにはどうすればよいですか? MainViewControllerDisplayControllerの間に何らかの種類のリンクが確立されている必要があり、DisplayControllerMainViewControllerにある属性を操作できるようになると思います。

ご協力いただければ幸いです!

+0

本当に他のクラスが必要ですか?なぜプロトコルを使用しないのですか? –

+0

プロトコルはコードではなく、「共有」するものではありません。 –

答えて

1

まず、静的な(つまり "+"対 " - ")メソッドは、いつでもどこからでも呼び出すことができます。これは、インスタンス変数にアクセスする必要のない一般的なメソッドを実装するための最も簡単な方法です。あなたはalloc EDとinitDisplayControllerのインスタンスを持って、そしてあなたがそのインスタンスへのポインタを持っている場合

次に、あなたはそれが制御するビューが表示されていない場合であっても、そのインスタンスのメソッドを呼び出すことができます。

そして、あなたは、例えば、DisplayControllerあなたが何らかの形で変更されているしたいUIButtonへのポインタのインスタンスメソッドに渡すことができますDisplayControllerに「所属」というUIButtonがいない場合であっても、(そのテキストを更新すると言います) 。コードは基本的にコードであり、そのビットは誰がそれらを設定するかを本当に気にしません。

DisplayControllerのプロパティにそのポインタUIButtonを割り当てることもできます。そのため、後で戻ってポインタを再度渡す必要はなく、操作できます。

「外国語」のオブジェクトを扱っていることや、現在のインスタンス変数(おそらく独自のプロパティ以外)がそれに関係していないことを忘れてはなりません。これを説明する目立つコメントがあることは賢明です。

おそらく私の知る限り、DisplayControllerをMainViewController.xibに直接リンクしています(ただし、そのxibは同時にMainViewControllerによってリンクされていますが、DisplayControllerインスタンスは同時にDisplayController.xibにリンクされています)。ええ、それを並べ替えるための奇妙な方法があるかもしれませんが、壊れやすく、複雑で、エラーを起こしやすいでしょう。

0

.xibファイルは単なるアーカイブなので、どのクラスもそのアーカイブを開いて読むことができます。 NSBundleクラスの

- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options 

のように見えます。これにより、最上位レベルのビューで満たされた配列が返され、任意のビューのサブビューからビュー階層を下に移動して、画像、ラベル、または.xibファイルに含まれるものを検索できます。

はい、DisplayViewControllerのメソッドは.xibファイルをロードして何かを行うか、またはMainViewControllerに渡すことができます。