Обнаружение нажатия кнопки с помощью UIAlertView - PullRequest
23 голосов
/ 16 августа 2010

Я пытаюсь позвонить и предупредить при нажатии кнопки.Я использую это:

-(IBAction)Add { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"add button pressed"
                                                    message:@"Add to record"
                                                   delegate:nil     
                                          cancelButtonTitle:@"Cancel" 
                                          otherButtonTitles:@"OK", nil   ];
    [alert show];
    [alert release];    
} 

хорошо, нет проблем здесь, две кнопки подошли, ОК и отмена.Теперь я хочу определить, какую кнопку я нажимаю:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    // the user clicked one of the OK/Cancel buttons
    if (buttonIndex == 0)
    {
       //just to show its working, i call another alert view
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"OK WORKIng well"
                                                        message:@"no error"                                                                                                            delegate:nil 
                                              cancelButtonTitle:@"IWORKS" 
                                              otherButtonTitles:@"NO PRB", nil];
        [alert show];
        [alert release];    


    }
    else
    {
        NSLog(@"cancel");       
    }
}

Теперь вот проблема.я не могу определить, какая кнопка нажата;2-й бдительный просмотр не показывает.Я проверил код пару раз, кажется, нет никаких проблем с ним.Нет ошибок / предупреждений тоже.

Ответы [ 6 ]

33 голосов
/ 16 августа 2010

Чтобы обнаружить нажатия кнопки, представление оповещения должно иметь связанный делегат , например,

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"add button pressed"
                                                message:@"Add to record"
                                               delegate:self    // <------
                                      cancelButtonTitle:@"Cancel"
                                      otherButtonTitles:@"OK", nil];
14 голосов
/ 12 марта 2012

Это ваш код, который я использовал и добавил также мой код. **

-(IBAction) Add 
{

          UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"add button pressed"

                                                       message:@"Add to record"
                                                      delegate:nil     
                                             cancelButtonTitle:@"Cancel" 
                                             otherButtonTitles:@"OK", nil];

       alert.tag=101;//add tag to alert
       [alert show];
       [alert release];     
}

Теперь, когда вы нажмете кнопку на предупреждении, она будет вызывать clickedButtonAtIndex но там должен быть идентификатор для каждого предупреждения. Так что добавьте тег, а затем

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

{

//  the user clicked one of the OK/Cancel buttons
if(alertView.tag == 101)     // check alert by tag 
{    

if (buttonIndex == 0)

   {

    //just to show its working, i call another alert view

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"OK WORKIng well"

                                                    message:@"no error"
                                                   delegate:nil
                                          cancelButtonTitle:@"IWORKS" 
                                          otherButtonTitles:@"NO PRB", nil];

    [alert show];
    [alert release];    

}

else

{
    NSLog(@"cancel");       
}
}
}

Надеюсь, это поможет.

7 голосов
/ 25 августа 2011

ButtonIndex of 0 - это кнопка отмены.Я бы порекомендовал использовать:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == 0)
{
      NSLog(@"cancel");   
}
else
{
   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"OK works" message:@"no error" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];                                                                                                              
    [alert show];
    [alert release];        
}
}
2 голосов
/ 18 марта 2014
1)
.h file 
@interface MyClassViewController:<UIAlertViewDelegate> 

2)
.m file

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Note"
                                                message:@"some message"
                                               delegate:self    // must be self to call clickedButtonAtIndex
                                      cancelButtonTitle:@"Cancel"
                                      otherButtonTitles:@"OK", nil];


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

  if (buttonIndex == [alertView cancelButtonIndex]) {
    NSLog(@"The cancel button was clicked from alertView");
  }
 else {

}
}
2 голосов
/ 20 марта 2013

Я чувствую, что если вы хотите показать новое представление оповещения о событии нажатия кнопки существующего представления оповещения, было бы лучше использовать

- (void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{

}

метод делегата вместо

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

}
1 голос
/ 06 сентября 2011

Если вы предпочитаете, чтобы ваш код был чище и не зависел от делегата, попробуйте реализацию блоков UIAlertView:

https://github.com/steipete/PSAlertView

Блоки поддерживаются только на устройствах iOS 4+.

...