好的,对于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/