Подтвердить что ты не робот

В листе действий не отображается кнопка "Отмена" на iPad

На 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 появляется только деструктивная кнопка.
В чем проблема?

4b9b3361

Ответ 1

Я смог решить это, установив actionSheetStyle:

actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;

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

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

- Обновление -

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

Ответ 2

Это часть дизайна и ориентиров пользовательского интерфейса. В разделе "Лист действия" они говорят:

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

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

Ответ 3

В 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.

Ответ 4

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

[actionSheet addButtonWithTitle:@"Cancel"];

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

actionSheet.cancelButtonIndex = <your index>;

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

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

Ответ 5

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

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

view.modalPresentationStyle = UIModalPresentationFormSheet;

Ответ 6

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

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