2012-05-06 7 views
2

iPhoneとObjective CとCocoa Touchのプログラミングには新しいものがありますが、これを理解できません。デリゲートが自己である場合は、多くの情報がありますが、別のファイルに送信しようとしています。ここでiPhone Appの別のファイルでUIAlertviewのデリゲートを設定する方法

いくつかのコードです... 私はGameUtil.happDelegate.m

[GameUtil showAlertViewWithTag:1 delegate:self withTitle:@"" message:msg cancelButtonTitle:@"New game" otherButtonTitles:@"Main Menu", nil];

に(私は通常の関数を呼び出しますが、私はこの方法が正しい用語だと思います)は、以下の方法を持っていると.m私はshowAlertViewWithTagを正しく設定しても問題ありません。

私が午前問題は、delegate:self一部である...それはスタンドとしてalertview上のボタンがクリックされたときに、それは私のappDelegate.mに位置しています-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexに行きます(自己を使用する際に期待されているコースのどのデリゲートとして)。

ボタンをクリックしたときにしたいことは、playField.mという別のファイルの-(void)alertView:..に送信してください。

私はalertviewの設定をplayField.mに正しく設定しています(alertFrameをdelegate:self with playField.mから呼び出すことでテスト済み)。

私は、appDelegate.mのalertviewに、delegate:selfの代わりにplayField.mにあるデリゲートを使用するように指示する方法については、基本的にわかりません。

#私はplayField.mまたは.hをappDelegate.mにインポートする必要があると思うが、それ以外にも@protocol @interfaceのすべてのものが失われている。

赤ちゃんのステップは、「あなたはplayField.hの上部にXYZを置き、playField.mの上部にABCを置く必要があります。

これは実装がかなり簡単で、ほんの少しの簡単なことが欠けていると思います。事前に

感謝:)

答えて

6

まず、これの結果はデリゲートメソッドは、別のファイルになることになるだろうされていても、あなたはむしろ「デリゲートは他の目的である」と考えるべきです。
あなたの場合、デリゲートオブジェクトは自己、つまりApp Delegateオブジェクトです。 (これはアプリケーションデリゲートの実装内に記述しているため)

デリゲートを別のオブジェクトにするには、まずそのオブジェクトのインスタンスをアプリケーションデリゲートでアクセスできるようにする必要があります。

私はあなたのplayFieldファイルがplayFieldクラスを保持していると仮定しています。 (私はそれをPlayFieldと呼ぶでしょう、クラスは通常大文字で、オブジェクト(クラスのインスタンス)はどちらでも動作しますが、そうではありません。

どこかで、playFieldオブジェクトをインスタンス化する必要があります。あなたはしていない場合は、その後showAlertViewCodeの上にそれを行う、

playField *pf=[[playField alloc] init]; 

:?どこかにこれは次のようになります。

#import "playField.h" 

あなたappDelegateファイルの先頭に:クラスは、あなたのappDelegateで利用できるように追加するために
。あなたのalertviewコードで、その後

、先ほど作成したオブジェクトによって自己を置き換える:

[GameUtil showAlertViewWithTag:1 delegate:pf withTitle:@"" message:msg cancelButtonTitle:@"New game" otherButtonTitles:@"Main Menu", nil]; 

今、あなたの代理人は、したがって、デリゲートメソッドは、あなたから呼び出されるプレイフィールドのインスタンスであるPFオブジェクト、ですplayField.m実装ファイル。

希望はこれが理にかなっています!上記の行で

+0

恐ろしい!これはまさに私が欠けていたものです( 'alloc init')。どうもありがとう! – jsherk

0
[GameUtil showAlertViewWithTag:1 delegate:self withTitle:@"" message:msg cancelButtonTitle:@"New game" otherButtonTitles:@"Main Menu", nil]; 

、変更の委任:委任する自己:GameUtilまたは代理人:self.GameUtilあなたはプロパティを使用している場合。

GameUtil.hファイルで、@Interface行の末尾に<UIAlertViewDelegate>を追加します。

関連する問題