2

OK、iPhone、Objective C、Cocoa Touchのプログラミングは初めてですが、これを理解できません。デリゲートがセルフだと情報が多いのですが、別のファイルに送ろうとしています。

ここにいくつかのコードがあります...私は次のメソッドを持っています(通常は関数と呼びますが、メソッドは正しい用語だと思います)appDelegate.m

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

GameUtil.hで、showAlertViewWithTag.mを適切に設定しましたが、正常に動作しています。

私が抱えている問題は、そのdelegate:self部分にあります...現状では、alertviewのボタンをクリック-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndexすると、私の中にあるものに移動しますappDelegate.m(もちろん、自分自身をデリゲートとして使用する場合に予想されます)。

しかし、ボタンがクリックされたときにやりたいことは、それを-(void)alertView:..という別のファイルに送信することですplayField.m

alertview を正しくセットアップしましたplayField.m(playField.m 内から delegate:self で alertview を呼び出してテストしました)。

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

playField.m または .h を appDelegate.m に #import する必要があると思いますが、それ以上は @protocol @interface のすべてで失われます。

「playField.h の先頭に XYZ を配置し、playField.m の先頭に ABC を配置する必要があります」のように、ベイビー ステップは非常に役立ちます。

これがかなり簡単に実装できることを願っています。いくつかの簡単なことが欠けているだけです。

前もって感謝します :)

4

2 に答える 2

6

まず、デリゲート メソッドが別のファイルにあるという結果になるとしても、「デリゲートは別のオブジェクトである」と考える必要があります。
あなたの場合、デリゲート オブジェクトは self、つまり App Delegate オブジェクトです。(アプリ デリゲートの実装内でこれを記述している

ため) デリゲートを別のオブジェクトにするためには、まずアプリ デリゲートでアクセスできるそのオブジェクトのインスタンスを用意する必要があります。

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

どこかで、playField オブジェクトをインスタンス化する必要があります。どこかでそれを実行しましたか?次のようになります。

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

まだ行っていない場合は、showAlertViewCode の上で行ってください。
クラスを appDelegate で使用できるようにするには、次を追加します。

#import "playField.h"

appDelegate ファイルの上に。

次に、alertview コードで、self を作成したばかりのオブジェクトに置き換えます。

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

これで、デリゲートは playField のインスタンスである pf オブジェクトになりました。したがって、デリゲート メソッドは playField.m 実装ファイルから呼び出されます。

これが理にかなっていることを願っています!

于 2012-05-06T05:50:05.653 に答える
0
[GameUtil showAlertViewWithTag:1 delegate:self withTitle:@"" message:msg cancelButtonTitle:@"New game" otherButtonTitles:@"Main Menu", nil];

上記の行で、delegate:self を delegate:GameUtil に変更するか、プロパティを使用している場合は delegate:self.GameUtil に変更します。

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

于 2012-05-06T05:53:29.283 に答える