1

ビューコントローラクラスがあります。加速度計が動きを検出し、デリゲートオブジェクトのaccelerometer:didAccelerate:メソッドを呼び出したときに、自分のビューでいくつかのことを実行したいと思います。

そのデリゲートオブジェクトは、私の脳の問題です。現在、私の脳は凍っていて、何が良くなるかわかりません。どう考えているか教えてください!

解決策1)ビューコントローラークラスで、UIAccelerometerDelegateプロトコルに準拠し、そのaccelerometer:didAccelerate:メソッドを実装します。AppDelegateクラスの-applicationDidFinishLaunching:メソッドで、そのビューコントローラーオブジェクトを、アクセラレーション時にメソッド呼び出しを受信するためのデリゲートとして設定しました。それはあまり良くないと思います。

解決策2)AccelerationDelegateという空白の新しいオブジェクトを作成し、そのUIAccelerometerDelegateプロトコルに準拠し、そのaccelerometer:didAccelerate:メソッドを実装し、AppDelegateクラスの-applicationDidFinishLaunching:メソッドでそのビューコントローラーオブジェクトをメソッド呼び出しを受信するためのデリゲートとして設定します加速時に。

しかし、解決策2の場合、私の脳は少し動けなくなりました。オブジェクト内のビューコントローラからビューオブジェクトにアクセスするにはどうすればよいですか?

ここでの問題は、周りに複数のViewControllerがあることです。私はタブバーコントローラーを使用してそれらを切り替えます。

どのように私がそれを正しくすることができるかについての提案はありますか?

4

2 に答える 2

2

私は2番目の方法がより良いことに同意します。現在選択されているタブビューだけにアクセスするのか、それともアプリの特定のビューだけにアクセスするのか。

UITabViewControllerいずれにせよ、私が行うことは、デリゲートからアクセスできるように、のプロパティを設定するUIApplicationDelegateことです(を呼び出すことでアプリデリゲートを取得できます[[UIApplication sharedApplication] delegate])。例えば:

YourApplicationDelegate *appDelegate = (YourApplicationDelegate *)[[UIApplication sharedApplication] delegate];
FirstUIViewController *firstViewController = appDelegate.firstViewController;
[firstViewController doStuff];

firstViewControllerデリゲートのプロパティはどこにありますか。

于 2009-05-05T21:59:51.997 に答える
1

アクセラレーションが1つのViewControllerに固有である場合は、ViewControllerに独自のサブビューを変更するために必要な情報を受信させるのが理にかなっています。ただし、ビューが表示されたときにビューコントローラをデリゲートに設定し、ビューが表示されなくなったときにデリゲートをnullに設定する方がよい場合があります。(具体的には、- (void) viewWillAppear:および- (void) viewWillDisappear:

于 2009-05-06T13:53:52.547 に答える