IOS: управление двумя кнопками в UIAlert - PullRequest
0 голосов
/ 01 июня 2011

У меня есть этот код в IBAction:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"NO!" 
                                                        message:@"danger"
                                                       delegate:self 
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:@"Annul", nil];

    [alertView show];
    [alertView release];

Теперь, если я нажму "ОК", это должно сделать что-то, а если я нажму "Аннулировать", оно должно сделать что-то другое. Но это должно быть сделано внутри IBAction.

Ответы [ 2 ]

9 голосов
/ 01 июня 2011

Вам необходимо реализовать метод UiAlertViewDelegate.

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

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

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
  {
          if(buttonIndex == 0)//OK button pressed
          {

          }
          else if(buttonIndex == 1)//Annul button pressed.
          {

          }
  }
1 голос
/ 01 июня 2011

Ответ Джалии великолепен, за исключением того, что он не отвечает на запрос блэкгарда о запуске этого метода IBAction. Наличие блока метода IBAction и ожидание ответа от UIAlertView - неправильный способ работать в CocoaTouch. IBAction должен просто представлять UIAlertView. Затем функция делегата в ответе Джалии должна проанализировать, в каком направлении действовать: «ОК» или «Аннулировать». Эта функция делегата может затем выполнить действие (возможно, вызвав дополнительные методы). Обработка событий CocoaTouch не предназначена для IBAction методов для блокировки в ожидании дальнейшего ввода данных пользователем.

Думайте о цепочке IBAction->UIAlertView->alertView:clickedButtonAtIndex: как о IBAction, когда не используете UIAlertView, и поместите свой текущий код в IBAction после этой цепочки.

...