如何在iPhone应用程序的不同文件中为UIAlertview设置委托

如何在iPhone应用程序的不同文件中为UIAlertview设置委托,iphone,objective-c,ios,cocoa-touch,ipad,Iphone,Objective C,Ios,Cocoa Touch,Ipad,好吧,我对iPhone、Objective C和Cocoa Touch的编程还不太熟悉,但我无法理解这一点。当代理是self时,会有很多信息,但我正在尝试将其发送到另一个文件 这里有一些代码。。。 我在appDelegate.m [GameUtil showAlertViewWithTag:1委托:带标题的self:@”“消息:msg CancelButtontile:@“新游戏”其他按钮:@“主菜单”,无] 在GameUtil.h和.m中,我已正确设置了带标记的ShowAlertViewWit

好吧,我对iPhone、Objective C和Cocoa Touch的编程还不太熟悉,但我无法理解这一点。当代理是self时,会有很多信息,但我正在尝试将其发送到另一个文件

这里有一些代码。。。 我在
appDelegate.m

[GameUtil showAlertViewWithTag:1委托:带标题的self:@”“消息:msg CancelButtontile:@“新游戏”其他按钮:@“主菜单”,无]

GameUtil.h
.m
中,我已正确设置了带标记的ShowAlertViewWith,并且工作正常

我遇到的问题是
代理:self
部分。。。目前,当单击alertview上的按钮时,它将转到位于my
appDelegate.m
中的
-(无效)alertview:(UIAlertView*)alertview ClickedButtonIndex:(NSInteger)buttonIndex
(当使用self作为代理时当然会出现这种情况)

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

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

基本上,我很难理解如何告诉appDelegate.m中的alertview使用playField.m中的委托而不是delegate:self

我想我需要#将playField.m或.h at导入appDelegate.m,但除此之外,我对所有@protocol@接口的东西都感到迷茫

婴儿步会非常有用,比如“你需要把XYZ放在你的运动场的顶端。h和ABC放在运动场的顶端。m”

我希望这是相当简单的实现,我只是错过了一些简单的事情


提前感谢:)

首先,即使这样做的结果是委托方法将位于另一个文件中,您还是应该将其视为“委托是另一个对象”。
在您的例子中,委托对象是self,即App委托对象。(因为这是在应用程序委托实现中编写的)

为了使委托成为另一个对象,您首先需要在应用程序委托中具有可访问该对象的实例。

我假设你的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实现文件中调用委托方法

希望这有意义

[GameUtil showAlertViewWithTag:1 delegate:self withTitle:@"" message:msg cancelButtonTitle:@"New game" otherButtonTitles:@"Main Menu", nil];
在上面的一行中,将delegate:self更改为delegate:GameUtil或delegate:self.GameUtil(如果您使用了属性)


在GameUtil.h文件中,将
添加到@Interface行的末尾。

太棒了!这正是我所缺少的(alloc init
东西)。非常感谢!