好的,对于iPhone,Objective C和Cocoa Touch编程是一种新事物,但无法弄清楚。当委托是自我时,有很多信息,但是我正在尝试将其发送到另一个文件。

这是一些代码...
我在appDelegate.m中有以下方法(我通常将其称为函数,但我认为方法是正确的术语)
[GameUtil showAlertViewWithTag:1 delegate:self withTitle:@"" message:msg cancelButtonTitle:@"New game" otherButtonTitles:@"Main Menu", nil];
GameUtil.h.m中,我正确设置了showAlertViewWithTag,并且工作正常。

我遇到的问题是delegate:self部分...按其现状,当单击alertview上的按钮时,它将转到位于我的-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex中的appDelegate.m(当然,使用self作为代理时,这是预期的) 。

但是,我希望单击按钮时要做的就是将它发送到另一个名为-(void)alertView:..的文件中的playField.m中。

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

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

我想我需要将playField.m或.h导入appDelegate.m中,但是除此之外,我对所有@protocol @interface东西都迷失了。

轻松执行步骤非常有帮助,例如“您需要将XYZ放在playField.h的顶部,将ABC放在playField.m的顶部”。

我希望这很容易实现,而我只是缺少一些简单的东西。

提前致谢 :)

最佳答案

首先,即使这样做的结果是委托方法将在另一个文件中,您也应该将其视为“委托是另一个对象”。
在您的情况下,委托对象是self,即App Delegate对象。 (因为您是在应用程序委托实现中编写此代码的)

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

我假设您的playField文件包含一个playField类。 (我会称它为PlayField btw,类通常用大写字母表示,而对象(类的实例)则不是大写字母,尽管无论哪种方式都可以。
在某个地方,您需要实例化一个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实现文件中调用委托方法。

希望这有道理!

关于iphone - 如何在iPhone App中的其他文件中为UIAlertview设置委托(delegate),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10468399/

10-12 07:32