2

好的,所以我对 iPhone、Objective C 和 Cocoa Touch 的编程有点陌生,但无法弄清楚这一点。当委托是自我时有很多信息,但我试图将其发送到另一个文件。

这是一些代码...我有以下方法(我通常将其称为函数,但我认为方法是正确的术语)appDelegate.m

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

我已经正确设置了showAlertViewWithTagGameUtil.h并且.m它工作正常。

我遇到的问题是delegate:self部件......就目前而言,当单击警报视图上的按钮时,它将转到-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex位于我的位置appDelegate.m(当使用 self 作为委托时,这当然是预期的)。

但是我希望它在单击按钮时将其发送到-(void)alertView:..另一个名为playField.m.

我正确设置了alertview playField.m(已通过在playField.m 中使用delegate:self 调用alertview 进行了测试)。

基本上,我对如何告诉 appDelegate.m 中的 alertview 使用 playField.m 中的委托而不是委托:self 感到困惑。

我想我需要#import playField.m 或 .h at 到 appDelegate.m 但除此之外,我迷失了所有@protocol @interface 的东西。

小步骤会很有帮助,例如“您需要将 XYZ 放在 playField.h 的顶部,将 ABC 放在 playField.m 的顶部”。

我希望这实现起来相当简单,而且我只是缺少一些简单的东西。

提前致谢 :)

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];

现在您的委托是 pf 对象,它是 playField 的一个实例,因此将从您的 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 回答