Ios 如何将另一个ViewController设置为AlertView的代理

Ios 如何将另一个ViewController设置为AlertView的代理,ios,uiviewcontroller,delegates,uialertview,Ios,Uiviewcontroller,Delegates,Uialertview,我想知道是否可以将Alert View delegate设置为其他ViewController。 原因是我打算根据用户按下的alert view(警报视图)按钮执行特定操作 以下是我试图做的:- 1] 在视图控制器.h文件中声明了,我需要在其中实现alertView委托方法 2] 这就是我的alertView在AppDelegate中的声明方式 - (void)application:(UIApplication *)application didReceiveLocalNotificatio

我想知道是否可以将Alert View delegate设置为其他ViewController。 原因是我打算根据用户按下的alert view(警报视图)按钮执行特定操作

以下是我试图做的:-

1] 在视图控制器.h文件中声明了
,我需要在其中实现alertView委托方法

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] 现在我想在另一个视图控制器中实现alertView委托方法
ClickedButtonIndex
,但它没有被调用

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
 {
    if (buttonIndex == 0)
    {
        NSLog(@"Cancel button pressed");
    }
 }  

在全局位置设置
rosterListController
委托,然后将alertview委托设置为其
rosterListController
委托。Alertview delgate函数将在设置其委托的视图中调用

GlobalSpace

id rosterDelegate;
+(void)setRosterDelegate:(id)_delegate{
_rosterDelegate=_delegat;
}
+(id)getRosterDelegate{
return _rosterDelegate;
}
现在在
rosterListController
类中,如下设置您的委托

[GlobalSpace setRosterDelegate:self];
alertView = [[UIAlertView alloc]initWithTitle:@"New Message" message:@"Click switch to check out" delegate:[GlobalSpace getRosterDelegate] cancelButtonTitle:@"OK" otherButtonTitles:@"Switch ", nil];
你的alertView是这样的

[GlobalSpace setRosterDelegate:self];
alertView = [[UIAlertView alloc]initWithTitle:@"New Message" message:@"Click switch to check out" delegate:[GlobalSpace getRosterDelegate] cancelButtonTitle:@"OK" otherButtonTitles:@"Switch ", nil];

在全局位置设置
rosterListController
委托,然后将alertview委托设置为其
rosterListController
委托。Alertview delgate函数将在设置其委托的视图中调用

GlobalSpace

id rosterDelegate;
+(void)setRosterDelegate:(id)_delegate{
_rosterDelegate=_delegat;
}
+(id)getRosterDelegate{
return _rosterDelegate;
}
现在在
rosterListController
类中,如下设置您的委托

[GlobalSpace setRosterDelegate:self];
alertView = [[UIAlertView alloc]initWithTitle:@"New Message" message:@"Click switch to check out" delegate:[GlobalSpace getRosterDelegate] cancelButtonTitle:@"OK" otherButtonTitles:@"Switch ", nil];
你的alertView是这样的

[GlobalSpace setRosterDelegate:self];
alertView = [[UIAlertView alloc]initWithTitle:@"New Message" message:@"Click switch to check out" delegate:[GlobalSpace getRosterDelegate] cancelButtonTitle:@"OK" otherButtonTitles:@"Switch ", nil];

您应该将AppDelegate设置为AlertView委托,因为它是表示Alter视图的应用程序委托。使用随机不相关的视图控制器是没有意义的。如果你有强烈的愿望去做这件事,考虑一下你的设计和应用逻辑有什么问题。 或者,您可以创建一个新类,该类将成为委托。此类的唯一用途是处理警报视图事件,并可能在演示者和警报视图之间传回数据和强制。您可以定义一个协议,该协议定义了演示者必须满足的最低API,以便与委托处理程序通信

对于显示此警报视图的每个演示者,都有一个代理对象的ivar。显示警报视图时,无论是哪个演示者,都要创建并初始化代理对象,并将其设置为代理。当警报视图将被解除时,释放委托对象


请注意,委派对象可能需要对演示者的引用,以便处理取消事件。

您应该将AppDelegate设置为AlertView委派,因为它是显示Alter View的应用程序委派。使用随机不相关的视图控制器是没有意义的。如果你有强烈的愿望去做这件事,考虑一下你的设计和应用逻辑有什么问题。 或者,您可以创建一个新类,该类将成为委托。此类的唯一用途是处理警报视图事件,并可能在演示者和警报视图之间传回数据和强制。您可以定义一个协议,该协议定义了演示者必须满足的最低API,以便与委托处理程序通信

对于显示此警报视图的每个演示者,都有一个代理对象的ivar。显示警报视图时,无论是哪个演示者,都要创建并初始化代理对象,并将其设置为代理。当警报视图将被解除时,释放委托对象


请注意,代理对象可能需要对演示者的引用,以便处理解雇事件。

是否存在rosterListController或它是否为零?ohk…名册列表控制器为零…嗯,为了让某人为您做些事情,该人需要存在,不是吗?所以,如果你想让你的viewController处理委托方法,你需要先创建它(alloc,init),然后再将它设置为委托。rosterListController存在还是为零?ohk…RosterList controller为零…嗯,为了让某人为你做些事,那个人需要存在,不是吗?因此,如果希望viewController处理委托方法,则需要在将其设置为委托之前创建它(alloc,init)。