На листе действий не отображается кнопка «Отмена» на iPad - PullRequest
23 голосов
/ 03 мая 2010

На iphone этот код показывает кнопку отмены:

- (IBAction)buttonPressed
{
    UIActionSheet *actionSheet = [[UIActionSheet alloc]
                                  initWithTitle:@"Are you sure?"
                                  delegate:self 
                                  cancelButtonTitle:@"No way!"
                                  destructiveButtonTitle:@"Yes, I'm sure!"
                                  otherButtonTitles:nil];
    [actionSheet showInView:self.view];
    [actionSheet release];  
}

Но на iPad отображается только деструктивная кнопка.
В чем проблема?

Ответы [ 6 ]

38 голосов
/ 03 мая 2010

Это часть дизайна пользовательского интерфейса и руководящих принципов . В разделе «Лист действий» говорится:

Не включать кнопку отмены, потому что люди могут нажать за пределами поповер уволить лист действий без выбора одного из других альтернативы.

Похоже, SDK скрывает для вас кнопку специально . Я не уверен, что есть решение, но, возможно, вы могли бы добавить свою собственную кнопку и установить cancelButtonIndex для соответствия Или вы можете переключиться на UIAlertView.

4 голосов
/ 12 ноября 2011

В iOS 5 это работало для меня.

- (void)manualAddModel
{
    UIActionSheet *popupQuery = [[UIActionSheet alloc] initWithTitle: @"Select Equipment Type"
                                                            delegate: self
                                                   cancelButtonTitle: @"Cancel"
                                              destructiveButtonTitle: nil
                                                   otherButtonTitles: @"Add Boiler", @"Add Furnace",  nil];

    popupQuery.actionSheetStyle = UIActionSheetStyleDefault;
    [popupQuery addButtonWithTitle:@"Cancel"];
    [popupQuery showInView:self.view];
}


- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {
        NSLog(@"Add Boiler");
    }
    else if (buttonIndex == 1)
    {
        NSLog(@"Add Furnace");
    }
    else if (buttonIndex == 2)
    {
        NSLog(@"Cancel Button Clicked");
    }
}

Как правило, нажатие за пределы таблицы действий служит той же цели в iPad.

2 голосов
/ 07 января 2011

Похоже, в iOS 4.2.1 вы можете вручную добавить свою собственную кнопку Отмена, как обычную кнопку:

[actionSheet addButtonWithTitle:@"Cancel"];

А затем установите:

actionSheet.cancelButtonIndex = <your index>;

Вы не получите красную кнопку отмены, но вы получите либо синюю, либо черную, в зависимости от настроек UIActionSheetStyle. В любом случае, он довольно четко отличается от обычных кнопок и корректно отменяется.

Обратите внимание, что в моем случае я показываю лист действий из контроллера поповера, ваши результаты могут отличаться в других случаях.

1 голос
/ 13 ноября 2013

В соответствии со стандартом iOS кнопка «Отмена» не отображается в UIActionSheet при отображении на iPad, поскольку UIActionSheet можно отменить (Скрыть), просто коснувшись любой области за пределами области ActionSheet. В случае iPhone UIActionSheet будет содержать кнопку Отмена.

См. Эту ссылку для получения дополнительной информации Кнопка отмены UIActionSheet в iPad

1 голос
/ 24 ноября 2011

У меня была такая же проблема, когда я пытался показать ActionSheet в представлении, которое было в другом модальном представлении, например вид был невидим. Хотя View не был нулевым, он выглядит глубоко в фреймворке, но это означает, что когда он не показан.

Я решил проблему, установив другое свойство UIModalPresentationStyle modalPresentationStyle, чтобы представление стало видимым.

view.modalPresentationStyle = UIModalPresentationFormSheet;
1 голос
/ 04 мая 2010

Мне удалось решить эту проблему, установив actionSheetStyle:

actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;

UIActionSheetStyleBlackTranslucent также работает.Я отображаю лист действий с контроллера модального вида, который, я думаю, технически не является «поповерконтроллером», как говорят инструкции, но не вижу кнопки «Отмена» на листе действий, которая выглядит неправильно, когда она появляется в верхней части модального вида.Все, что видит пользователь, - это одна страшная красная кнопка без видимой альтернативы.

Возможно, я мог бы изменить контроллер модального представления на popovercontroller, но тогда он не был бы модальным, каким он должен быть.* - Обновление -

Что ж, это было забавно, но это больше не работает в iOS 4.2.
Я переключился на использование UIAlertView вместо UIActionSheet.
У меня больше нет крутой красной кнопки, но она выполняет свою работу.

...