Цель C: AlertView не работает - PullRequest
       34

Цель C: AlertView не работает

1 голос
/ 05 апреля 2011

Я реализую представление предупреждений после того, как пользователь нажимает кнопку «destructButton» на листе действий.Фрагмент кода, как показано ниже:

-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
  if (buttonIndex != actionSheet.cancelButtonIndex)
  {
     UIAlertView *alert = [[UIAlertView alloc] 
     initWithTitle:@"Something happened!"
     message:nil
     delegate:nil
     cancelButtonTitle:@"Phew!"
     otherButtonTitles:nil];
  }

  [alert show];
  [alert release];
}

Я уже включил протокол UIActionSheetDelegate в мой файл .h

@interface Control_FunViewController : UIViewController <UIActionSheetDelegate> {
    UITextField *nameField;
    UITextField *numberField;
    UILabel *sliderLabel;
    UISwitch *leftSwitch;
    UISwitch *rightSwitch;
    UIButton *doSomethingButton;

}

Но когда я нажимаю кнопку destructButton в таблице действий, ничего не происходит.Я что-то здесь упускаю?

Спасибо

Жен

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

Ваш делегат должен реализовать actionSheet:clickedButtonAtIndex:.

Лист действий будет отклонен после actionSheet:clickedButtonAtIndex:, и после этого делегат получит actionSheet:didDismissWithButtonIndex:.

Из Справка по протоколу делегата Apple Action Sheet

... делегат должен реализовать actionSheet: clickedButtonAtIndex: сообщение, которое будет реагировать при нажатии этих кнопок;в противном случае ваши пользовательские кнопки ничего не делают.Лист действий автоматически отклоняется после вызова метода actionSheet: clickedButtonAtIndex: .

Вы можете посмотреть примеры проектов, которые используют UIActionSheet, например GenericKeychain :

    // Action sheet delegate method.
    -      (void)actionSheet:(UIActionSheet *)actionSheet
        clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        // the user clicked one of the OK/Cancel buttons
        if (buttonIndex == 0)
        {
            [passwordItem resetKeychainItem];
            [accountNumberItem resetKeychainItem];
            [self.tableView reloadData];
        }
    }
1 голос
/ 05 апреля 2011

Вы добавили UIActionSheetDelegate в файл .h.Не только этого достаточно.Вы также должны установить делегат для объекта UIActionSheet.См. Приведенный ниже код:

- (void) showActionSheet {UIActionSheet * action = [[UIActionSheet alloc] initWithTitle: @ "dsfs" делегат: self cancelButtonTitle: @ "First Btn" destructiveButtonTitle: @ "Dest Btnit otherButton: ноль];[action showInView: self.view];

}

В этом коде я установил для делегата UIActionSheet значение self, это работает, если вы добавили этот метод в свой ViewController (Control_FunViewController),

...