如何在 iPhone 应用程序的不同文件中为 UIAlertview 设置委托
Posted
技术标签:
【中文标题】如何在 iPhone 应用程序的不同文件中为 UIAlertview 设置委托【英文标题】:How to set delegate for UIAlertview in a different file in iPhone App 【发布时间】:2012-05-06 05:35:55 【问题描述】:好的,所以我对 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
部分...就目前而言,当单击警报视图上的按钮时,它将转到位于我的appDelegate.m
中的-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
(当然是使用 self 作为委托时需要)。
但是当单击按钮时,我希望它在另一个名为 playField.m
的文件中将其发送到 -(void)alertView:..
。
我在playField.m
中正确设置了alertview(已通过在playField.m 中使用delegate:self 调用alertview 进行了测试)。
基本上,我对如何告诉 appDelegate.m 中的警报视图使用 playField.m 中的委托而不是委托:self 感到困惑。
我认为我需要将 #import playField.m 或 .h at 导入 appDelegate.m,但除此之外,我对所有 @protocol @interface 的东西感到迷茫。
小步骤会很有帮助,例如“您需要将 XYZ 放在 playField.h 的顶部,将 ABC 放在 playField.m 的顶部”。
我希望这实现起来相当简单,我只是缺少一些简单的东西。
提前致谢:)
【问题讨论】:
【参考方案1】:首先,即使这样做的结果是委托方法将在另一个文件中,您也应该将其视为“委托是另一个对象”。 在您的情况下,委托对象是 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 实现文件中调用委托方法。
希望这是有道理的!
【讨论】:
太棒了!这正是我所缺少的(alloc init
的东西)。非常感谢!【参考方案2】:
[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 行的末尾。
【讨论】:
以上是关于如何在 iPhone 应用程序的不同文件中为 UIAlertview 设置委托的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iphone 5s 和 iphone X 的情节提要中为 uibutton 设置不同的大小?
如何在 XCode 中为不同版本的 iPhone OS 编写代码?
如何在之前为 iPhone 构建的应用程序中为 iPad 添加 .xib 文件?
如何在 Xcode 中为 Iphone 应用程序导入字体 [重复]
如何在 Kendo UI Grid 中为不同的页面设置不同的页面大小
在Xcode 5.0.1(更新的xcode 6)中为3.5,4.0(更新的4.7和5.5)英寸屏幕开发相同的UI,没有风景,没有iPad,没有故事板