如何将另一个 ViewController 设置为 AlertView 的委托
Posted
技术标签:
【中文标题】如何将另一个 ViewController 设置为 AlertView 的委托【英文标题】:How to set another ViewController as a delegate of AlertView 【发布时间】:2013-12-03 06:41:09 【问题描述】:我想知道是否可以将警报视图委托设置为其他视图控制器。 原因是因为我打算根据用户按下的警报视图按钮来实现某个动作。
这是我想要做的:-
1] 在需要实现 alertView 委托方法的视图 controller.h 文件中声明 <UIAlertViewDelegate>
。
2]这就是我的 alertView 在 AppDelegate 中的声明方式。
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive)
alertView = [[UIAlertView alloc]initWithTitle:@"New Message" message:@"Click switch to check out" delegate:rosterListController cancelButtonTitle:@"OK" otherButtonTitles:@"Switch ", nil];
[alertView show];
3] 现在我想在另一个 View Controller 中实现 alertView 委托方法 clickedButtonAtIndex
,但它没有被调用。
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
if (buttonIndex == 0)
NSLog(@"Cancel button pressed");
【问题讨论】:
rosterListController 是否存在或者它不存在? ohk....名册列表控制器为零.... 好吧,为了让某人为你做某事,那个人需要存在,不是吗?因此,如果您希望您的 viewController 处理委托方法,则需要在将其设置为委托之前创建它 (alloc, init)。 【参考方案1】:您应该将 AppDelegate 设为 AlertView 委托,因为它是应用程序委托呈现 Alter View。使用随机不相关的视图控制器是没有意义的。如果您无论如何都强烈希望这样做,请考虑您的设计和应用程序逻辑有问题。
或者,您可以创建一个新类,它成为委托。此类的唯一目的是处理警报视图事件,并可能在演示者和警报视图之间传递数据和强制。您可以定义一个协议,该协议定义了演示者必须满足的最小 API 才能与委托处理程序进行通信。
对于呈现此警报视图的每个演示者,都有一个代表对象的 ivar。当您呈现警报视图时,无论是哪个呈现者,都创建并初始化委托对象并将其设置为委托。当警报视图将被关闭时,释放委托对象。
请注意,委托对象可能需要对演示者的引用,以便处理解除事件。
【讨论】:
【参考方案2】:在全局位置设置 rosterListController
委托,然后将 alertview 委托设置为其 rosterListController
委托。 Alertview delgate 函数将在设置其委托的视图中调用。
GlobalSpace
id rosterDelegate;
+(void)setRosterDelegate:(id)_delegate
_rosterDelegate=_delegat;
+(id)getRosterDelegate
return _rosterDelegate;
现在在你的rosterListController
类中设置你的委托
[GlobalSpace setRosterDelegate:self];
你的 alertView 像这样
alertView = [[UIAlertView alloc]initWithTitle:@"New Message" message:@"Click switch to check out" delegate:[GlobalSpace getRosterDelegate] cancelButtonTitle:@"OK" otherButtonTitles:@"Switch ", nil];
【讨论】:
以上是关于如何将另一个 ViewController 设置为 AlertView 的委托的主要内容,如果未能解决你的问题,请参考以下文章
使用 SearchController 推送 ViewController 在搜索栏下显示黑色矩形
如何判断我的 ViewController 何时再次成为栈顶?
如何在没有情节提要的情况下创建 ViewController 并将一个设置为另一个的委托?