一个视图控制器中的两个警报视图 - buttonIndex 响应

Posted

技术标签:

【中文标题】一个视图控制器中的两个警报视图 - buttonIndex 响应【英文标题】:Two Alert Views in One View Controller - buttonIndex Response 【发布时间】:2013-01-31 09:01:15 【问题描述】:

我正在尝试在单个视图控制器中执行具有两个警报的微笑任务。下面的代码工作正常,但我将如何在视图控制器的其他地方创建另一个实例。我担心如果我复制代码,我的 buttonIndex 将不知道它正在响应哪个警报。有任何想法吗?谢谢!

-(void)alertChoice

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title"
    message:@"Message" delegate:self
    cancelButtonTitle:@"Cancel" otherButtonTitles:@"Confirm", nil];
    [alert show];


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

    if (buttonIndex == 1) 
    
    //do something
    

【问题讨论】:

【参考方案1】:

您可以使用UIAlertView 上的tag 属性来破译哪个警报是哪个:

-(void)alertChoice

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title"
    message:@"Message" delegate:self
    cancelButtonTitle:@"Cancel" otherButtonTitles:@"Confirm", nil];
    alert.tag = 0;
    [alert show];


-(void)alertChoice1

    UIAlertView *alert1 = [[UIAlertView alloc] initWithTitle:@"Title"
    message:@"Message" delegate:self
    cancelButtonTitle:@"Cancel" otherButtonTitles:@"Confirm", nil];
    alert1.tag = 1;
    [alert1 show];


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

    if(alertView.tag == 0)
    
    

【讨论】:

【参考方案2】:

将标签设置为警报视图。

alert.tag = 1;

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

    if (buttonIndex == 1 && alertView.tag == 1) 
    
    //do something
    

【讨论】:

【参考方案3】:

只需为每个警报视图设置一个标签,然后检查是哪一个发送了消息。

alertView.tag=0;

然后

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

if(alertView.tag==0)

      if(buttonIndex == 0)//OK button pressed
     
       //do something
     
     else if(buttonIndex == 1)//Annul button pressed.
     
      //do something
     
else

  if(buttonIndex == 0)//OK button pressed

       
        //do something
      
      else if(buttonIndex == 1)//Annul button pressed.
    
    //do something
    
  

【讨论】:

【参考方案4】:

第 1 步:在视图 controller.h 文件中添加 UIAlertViewDelegate

第 2 步:在你的 view controller.m 文件中添加以下方法

-(void)AlertMethodOne

  UIAlertView *alertview=[[UIAlertView alloc]initWithTitle:@"AlertMethodOne" message:@"AlertMethodOne successfully Called" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil];
    alert.tag=101;
    [alertview show];  


-(void)AletrMethodTwo

UIAlertView *alertview=[[UIAlertView alloc]initWithTitle:@"AletrMethodTwo" message:@"AlertMethodTwo successfully Called" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil];
alert.tag=102;
    [alertview show]; 

在您的 viewController 中调用上述两个方法,如下所示: [自我警报方法一]; [self AlertMethodTwo];

Now AlertView 按钮点击方法

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

if(alertView.tag==101)

   if (buttonIndex == 0)
   
   

if(alertView.tag==102)

   if (buttonIndex == 1)
     
   


【讨论】:

以上是关于一个视图控制器中的两个警报视图 - buttonIndex 响应的主要内容,如果未能解决你的问题,请参考以下文章

在主视图控制器中显示警报视图(从子类调用)

如何直接通过点击通知警报打开隐藏在视图层次结构中的视图控制器

隐藏不同视图控制器的子视图

如何向推送通知警报视图添加操作?

如何从 iOS 中的警报通知操作启动视图控制器?

一个视图中的多个警报只能在 swiftui 中始终使用最后一个警报